見出し画像

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)
    }
}

上記のコードは本来はパスするはずなのに、なぜかテストが失敗するとします。

これを実行すると、次のように期待通りの失敗としてテスト自体は失敗扱いになりません。

スクリーンショット 2021-05-24 16.17.19

もしテストが成功した場合は、逆に失敗扱いとなります。

スクリーンショット 2021-05-24 16.38.19


Xcodeのテストレポート上の見え方

このAPIを利用した場合、Xcodeのテストレポート上では成功、失敗とは違うマークが表示されます。

このマークも含めるとテストレポート次のような4種類のマークがあります。

スクリーンショット 2021-05-23 7.18.53

上から順に「失敗」「スキップ(Xcode11.4から追加されました)」「成功」「期待したどおりの失敗(Xcode12.5から追加)」

また、テストレポートの上部に表示されるタブは次のような感じに増えました(MixedはXcode11から追加されたTest Planの際に追加されたものです)。

スクリーンショット 2021-05-23 7.43.00

疑問点

疑問点として、テスト結果についてです。

上記の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」が追加されました。

スクリーンショット 2021-05-23 7.12.25

これによって、テスト結果をクリーンにできます。

- watchOSアプリのXCTest(ユニットテスト、UIテスト)をサポートしました。

とうとうサポートされました。

- コードカバレッジの結果に、ファイルごとの実行行数が表示されるようになりました。

下のように実行行数が表示されるようになりました。

スクリーンショット 2021-05-23 7.23.10


この記事が気に入ったらサポートをしてみませんか?