【swift】単体テストを実行する

  • 2021年6月25日
  • 2021年6月25日
  • 未分類

単体テストとは、一つの小さな機能が正しく動作するかを調べるために、テストコードを作って

適当な値を入れて試し動作をする工程のことです。

小さな動作一つ一つを調べるので、比較的早い段階でバグを見つけて修正することができます。

swiftでは、Create New a Xcode Projectを選択後、基本情報入力ページ(名前などをつけるページ)

にあるIncludeUnitTestsにチェックをつけることでテストファイルを作ることができます。

また、途中でテストファイルを作りたい場合は

  1. File > New > Targetをクリックする
  2. Testセクションの中のiOS Unit Testing Bundleを選択してNextをクリックする
  3. 情報を入力してFinishをクリッックする

で作ることができます。それでは、ここで文字列を入れてその文字列が期待した文字列と同一か

どうかを確認するコードを作ります。

まず、ViewControllerのコードを追加します。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    func mcall(str: String) -> String {
      return str
    }
}

ただ変数strを返すだけの関数を作りました。これをテストコード内で試しに送る文字列と

実際に返される文字列を比較します。

次はテストコードを追加。

import XCTest
@testable import UnitTest

class UnitTestTests: XCTestCase {
  var viewController: ViewController!
    override func setUpWithError() throws {
        // Put setup code here. This method is called before the invocation of each test method in the class.
        super.setUp()
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        self.viewController = storyboard.instantiateInitialViewController() as? ViewController
    }

    override func tearDownWithError() throws {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() throws {
        XCTContext.runActivity(named: "文字が一致するかどうか"){ _ in
        let result = viewController?.mcall(str: "asaba")
        XCTAssertEqual(result, "asaba")
    }
    }
    func testPerformanceExample() throws {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}

○○Testsファイル(ここではUnitTestTests)の中には、デフォルトでsetUpWithError、

tearDownWithError、testExample、testPerformanceExampleとありますが、今回テストで使うのは

testExampleのみ。ここで機能の検証を行います。

中では、viewControllerの中の関数「mcall」を呼び出して引数(僕の名前)を入れています。

その後XCTAssertEqual(引数同士で比較する関数)で入れた引数と期待値を比較して

整合性がとれた場合はTest Success、何らかの理由で一致しなかった場合はTestFailedが画面真ん中

に走ります。

このように、本当に小さな機能を調べるので、同じような量の入れたいテストが出てきた場合は

どんどん追加しないといけないのですが、入れているとその内あのテストコードどこだっけ?

という事態に陥ります。

そのような事故をなくすために、XCTContext.runActivity(named: “”){ _ in}という関数があります。

namedのところに目的のテスト内容を入れることで、目的別に見ることができます。

確認方法は、メニューバー左から6番めのShow The Test Navigatorでテストをしているファイルを

右クリック->Jump To Reportで見ることができます。

感想は、簡単なテストであれば上記のようにさくっとできてしまうので

シンプルでやりやすいなとはいった感じです。xcodeではこんな簡単にテストができてしまう

のかと思うくらい簡単でした。

さて、終わりの前にぶっ込みますが、swiftにはもう一つ○○UITestsなるものがあるのですが

それはまたの機会に触ります。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG