ObjecTips

Swift & Objective-C で iOS とか macOS とか

XCTest の name プロパティの活用

XCText.framework でテストを書く時テストケースのクラス階層は
MyTests: XCTestCase : XCTest
となっていて XCTest には name というプロパティがある。
このプロパティで、今どのクラスのどのテストケース(テストメソッド)が実行されているかを知る事ができる。
ヘッダには

Test's name. Must be overridden by subclasses.

と書かれているがオーバーライド無しでそのまま使える。

NSLog(@"%@", self.name)
- [<ClassName> <TestName>]
のフォーマットで出力されるので、上記コードでは __func__ を加えて setUptearDownメソッド名もログ表示させている。
上記のテスト実行時のログ出力は以下のようになる。

Test Suite 'All tests' started at 2015-06-14 15:19:14 +0000
Test Suite 'TestTests.xctest' started at 2015-06-14 15:19:14 +0000
Test Suite 'TestTests' started at 2015-06-14 15:19:14 +0000
Test Case '-[TestTests testExample]' started.
2015-06-15 00:19:14.551 Test[7406:6312991] -[TestTests testExample] setUp
2015-06-15 00:19:14.551 Test[7406:6312991] -[TestTests testExample] testExample
2015-06-15 00:19:14.551 Test[7406:6312991] -[TestTests testExample] tearDown
Test Case '-[TestTests testExample]' passed (0.000 seconds).
Test Case '-[TestTests testExample2]' started.
2015-06-15 00:19:14.552 Test[7406:6312991] -[TestTests testExample2] setUp
2015-06-15 00:19:14.552 Test[7406:6312991] -[TestTests testExample2] testExample2
2015-06-15 00:19:14.552 Test[7406:6312991] -[TestTests testExample2] tearDown
Test Case '-[TestTests testExample2]' passed (0.000 seconds).
Test Suite 'TestTests' passed at 2015-06-14 15:19:14 +0000.
     Executed 2 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'TestTests.xctest' passed at 2015-06-14 15:19:14 +0000.
     Executed 2 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'All tests' passed at 2015-06-14 15:19:14 +0000.
     Executed 2 tests, with 0 failures (0 unexpected) in 0.001 (0.002) seconds

ログ内にテストの開始 started と終了 passed (0.000 seconds) のログもあるけど、個人的には setUptearDown が突き出して表示されているとテストの開始と終了がパッと見て分かりやすいように思う。


続編はこちら