Xcode12.5のTesting周りについて(軽く)まとめてみた
Xcode12.5がリリースされましたね。
リリースノートを見るとTestingについてある程度あったのでピックアップしてまとめてみました(Resolved IssuesとかKnown Issuesについては言及していません)。
StoreKit
待望のStoreKitのためのStoreKit TestingについてはXcode12から追加されています。
これにたいしてXcode12.5から次の機能が追加されています。
- StoreKit Testing in Xcode now supports testing of non-renewing subscriptions
- The StoreKit Test framework is now available on watchOS.
StoreKit Testingについては下記のAppleのドキュメントがあります。
StoreKit Testingについては上記のドキュメント含め、記事にまとめようとは思っていますが見事に完成しておりません(下書きのまま..)。
XCTExpectFailure
Xcode11.4では特定条件の際にテストをスキップするAPIが追加されました。
Xcode12.5では、テストが失敗した場合でも失敗扱いにせず、逆に成功した場合に失敗にするAPI(XCTExpectFailure)が追加されました。
RSpecではskipとpendingがありますが、Xcode11.4でskipが追加されてXcode12.5でpendingが追加されたという感じでしょうか。
例えば、次のコードがあったとします。
func test_XCTExpectFailure() throws {
// FIXME
XCTExpectFailure("なぜか失敗するテスト") {
let actualGyouza = GyouzaList.recommend()
let expectedGyouza = "歓迎"
XCTAssertEqual(expectedGyouza, actualGyouza)
}
}
上記のコードは本来はパスするはずなのに、なぜかテストが失敗するとします。
これを実行すると、次のように期待通りの失敗としてテスト自体は失敗扱いになりません。
もしテストが成功した場合は、逆に失敗扱いとなります。
Xcodeのテストレポート上の見え方
このAPIを利用した場合、Xcodeのテストレポート上では成功、失敗とは違うマークが表示されます。
このマークも含めるとテストレポート次のような4種類のマークがあります。
上から順に「失敗」「スキップ(Xcode11.4から追加されました)」「成功」「期待したどおりの失敗(Xcode12.5から追加)」
また、テストレポートの上部に表示されるタブは次のような感じに増えました(MixedはXcode11から追加されたTest Planの際に追加されたものです)。
疑問点
疑問点として、テスト結果についてです。
上記の4つのテストケースを実行したログは次のようになります。
Test Suite 'Selected tests' failed at 2021-05-23 07:44:46.366.
Executed 4 tests, with 1 test skipped and 1 failure (0 unexpected) in 0.072 (0.075) seconds
ログ上では、テストケース数は4つになっているもののこのExpected Failuresについては表示されていません。
また、テストで生成されるResult Bundles(xcresultファイル)をもとに次のようなコマンドを叩いて表示されたjsonの中身を見ても、Expected Failuresと思われる内容があるようには見えません(このResult BundlesはXcode11から追加されました)。
$ xcrun xcresulttool get \
--path Sample.xcresult \
--format json
これが今後どうなるのかな?というところが現時点での疑問点です。
(個人的にはこのAPIをつかっているテストがいくつあるかを知りたいところです。
APIの使い方
このAPIの使い方としては、例えば次のようなケースがあります。
例えばたまに落ちるテストがあったとして、そのテストケースに対して無効化するということがあるかもしれません。
このようにしてコードを共有してしまうと、そういったテストがあることがわかりづらくなります。
また「いつの間にかちゃんと通るようになっていた」というのに気づくこともできます。
Xcode11.4で追加されたスキップや今回のAPIにより、よりテストケースの管理がしやすくなるでしょう。
その他
- Xcodeの「Productメニュー」に「Clean Test Results」が追加されました。
これによって、テスト結果をクリーンにできます。
- watchOSアプリのXCTest(ユニットテスト、UIテスト)をサポートしました。
とうとうサポートされました。
- コードカバレッジの結果に、ファイルごとの実行行数が表示されるようになりました。
下のように実行行数が表示されるようになりました。
この記事が気に入ったらサポートをしてみませんか?