単体テストとは、一つの小さな機能が正しく動作するかを調べるために、テストコードを作って
適当な値を入れて試し動作をする工程のことです。
小さな動作一つ一つを調べるので、比較的早い段階でバグを見つけて修正することができます。
swiftでは、Create New a Xcode Projectを選択後、基本情報入力ページ(名前などをつけるページ)
にあるIncludeUnitTestsにチェックをつけることでテストファイルを作ることができます。
また、途中でテストファイルを作りたい場合は
- File > New > Targetをクリックする
- Testセクションの中のiOS Unit Testing Bundleを選択してNextをクリックする
- 情報を入力して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なるものがあるのですが
それはまたの機会に触ります。