ObjecTips

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

テスト時のログを見やすくする

前回 XCTestname プロパティを使ってテスト時のログを見やすくする方法について書いた。

その時は XCTestname プロパティがあるのを知って「これを使えばログを見やすくできるんじゃないか?」という思考だったけど、その後純粋に「ログを見やすくするには?」の方向で考えたらもっと別の方法があった。

実装としては XCTest クラスの

- (void)performTest:(XCTestRun *)run;

のオーバーライドで、このメソッドの super の実行前のログ出力は started の前に、super 実行後のログ出力は passed (0.000 seconds) の後にログ出力される。

コードでコメントアウトしている部分については NSStringFromClass(self.class) でクラス名を取得、
NSStringFromSelector(self.invocation.selector) で実行するテストメソッドの名前を取得
など試行錯誤してみたけど最終的に改行だけでいいんじゃない?という事で落ち着いた。
お好みで改行の代わりにハイフンで区切ってもいいと思う。

上記のテストを実行すると以下のようにログ出力される。

Test Suite 'All tests' started at 2015-06-14 16:15:12 +0000
Test Suite 'TestTests.xctest' started at 2015-06-14 16:15:12 +0000
Test Suite 'TestTests' started at 2015-06-14 16:15:12 +0000

Test Case '-[TestTests testExample]' started.
2015-06-15 01:15:12.941 Test[7983:6500037] abc
Test Case '-[TestTests testExample]' passed (0.000 seconds).

Test Case '-[TestTests testExample2]' started.
2015-06-15 01:15:12.941 Test[7983:6500037] def
Test Case '-[TestTests testExample2]' passed (0.000 seconds).

Test Case '-[TestTests testExample3]' started.
2015-06-15 01:15:12.942 Test[7983:6500037] xyz
Test Case '-[TestTests testExample3]' passed (0.000 seconds).
Test Suite 'TestTests' passed at 2015-06-14 16:15:12 +0000.
     Executed 3 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'TestTests.xctest' passed at 2015-06-14 16:15:12 +0000.
     Executed 3 tests, with 0 failures (0 unexpected) in 0.001 (0.001) seconds
Test Suite 'All tests' passed at 2015-06-14 16:15:12 +0000.
     Executed 3 tests, with 0 failures (0 unexpected) in 0.001 (0.002) seconds

まとめとしては

これでOK