概要
今までずっと逃げていたのでとりあえずテストする方法を勉強しました
まずは超かんたんなクラスのユニットテストから書いてみます
環境
- macOS 10.13.4
- Xcode 9.3.1 (9E501)
事前準備
プロジェクトを作成しましょう
今回は test
という名前のプロジェクトとして進めていきます
プロジェクトは Single View Application として作成しました
今回は単純なクラスのテストなので、SpriteKit でも同じようにできると思います
テスト対象のクラスを作成
こんな感じで Swift ファイルを追加しましょう
UIViewController を継承した UI 専用のクラスではなくモデルとして管理するクラスを作成しました
class Person {
var name = ""
var height: Double = 0
var weight: Double = 0
init(_ name: String, _ height: Double, _ weight: Double) {
self.name = name
self.height = height
self.weight = weight
}
func hi() -> String {
return "Hi. I'm \(self.name)."
}
func bmi() -> Double {
// 小数点 2 桁目で切り上げ
let val = self.weight / (self.height / 100 * self.height / 100) * 100
return val.rounded() / 100
}
}
このコードをテストしてみます
テストを記載する
テストを記載します
プロジェクトを作成した際の雛形をベースにしています
記載するファイルは testTests.swift
になります
setUp
, tearDown
は特に何もしていませんが残しています
追加したのは testHI
と testBMI
になります
命名規則としてテストメソッドは testXXX
と先頭に test を付与する必要があります
import XCTest
@testable import test
class testTests: XCTestCase {
override func setUp() {
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testHi() {
let p = Person("taro", 160, 55)
let ret = p.hi()
XCTAssertEqual(ret, "Hi. I'm \(p.name).")
}
func testBMI() {
let p = Person("hanako", 140, 40)
let ret = p.bmi()
XCTAssertEqual(ret, 20.41)
}
}
XCT ほげほげでいろいろなアサートが用意されています
公式に Boolean 用のアサート、nil チェックのアサート、比較用のアサートなどアサートごとに使うメソッドが紹介されているのでテストに合わせて必要なアサートを使い分けると良いと思います
テストを実行する
テストが書けたら実行しましょう
Product -> Test でテストを実行できます
今回の方法だと UI のテストも実行されてしまうのでシミュレータも起動してしまいます
少しだけ時間がかかりますが待ちましょう
テストが終了すると左メニューの項目からテスト結果を確認することができます
コンソールにテスト結果が表示されます
デフォルトだと各テストにかかった時間が表示されます
またログはファイルにも保存してくれるようです
Test Suite 'All tests' started at 2018-05-14 15:02:42.270
Test Suite 'testTests.xctest' started at 2018-05-14 15:02:42.272
Test Suite 'testTests' started at 2018-05-14 15:02:42.273
Test Case '-[testTests.testTests testBMI]' started.
Test Case '-[testTests.testTests testBMI]' passed (0.010 seconds).
Test Case '-[testTests.testTests testHi]' started.
Test Case '-[testTests.testTests testHi]' passed (0.011 seconds).
Test Suite 'testTests' passed at 2018-05-14 15:02:42.298.
Executed 2 tests, with 0 failures (0 unexpected) in 0.021 (0.025) seconds
Test Suite 'testTests.xctest' passed at 2018-05-14 15:02:42.299.
Executed 2 tests, with 0 failures (0 unexpected) in 0.021 (0.027) seconds
Test Suite 'All tests' passed at 2018-05-14 15:02:42.302.
Executed 2 tests, with 0 failures (0 unexpected) in 0.021 (0.032) seconds
Test session log:
/var/folders/r1/x8tl35cx1mqfhjc2j_3xrmh40000gn/T/com.apple.dt.XCTest/IDETestRunSession-31D0CEE0-D0A5-4341-BCA6-6BD00BCA3D43/testTests-3E0BE5CC-A327-4694-A38A-F00135FE1DEB/Session-testTests-2018-05-14_150213-m3n24r.log
こんな感じでユニットテストを書くことができます
最後に
Swift で Xcode を使ってユニットテストを作成してみました
さすがにユニットテストは他の言語などと同じように書けました
次回は UI のテストを行う方法を紹介したいと思います
0 件のコメント:
コメントを投稿