Xcodeでのテストが変わる! 同時起動やスクリーンショット機能が追加されました! #WWDC17
はじめに
こんにちは!
モバイルアプリサービス部の田中孝明です。
現地で参加した「What's New in Testing」のセッションのレポートになります。
本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。
What's New in Testing
Xcode 9 has new APIs for structuring your test logging and including your own attachments and screenshots, as well as new support for parallel device and simulator testing. Learn how to write UI tests that target multiple applications, and find out ways to improve the performance of your UI tests.
セッション動画に関しては以下で公開される予定です。
※現地時間6/8 18:00時点ではまだ公開されていません。
同時起動
テストターゲットの同時起動ができるようになりました。
こちらは是非実機動作させて試してみたいですね。
Asynchronous Tests and Expectations
ネットワークやアニメーションのテストなど、非同期で結果を受け取りたい時にXCTestExpectation
を使う事で実現できるようになりました。
func testDownloadWebData() { // Create an expectation for a background download task. let expectation = XCTestExpectation(description: "Download apple.com home page") // Create a URL for a web page to be downloaded. let url = URL(string: "https://apple.com")! // Create a background task to download the web page. let dataTask = URLSession.shared.dataTask(with: url) { (data, _, _) in // Make sure we downloaded some data. XCTAssertNotNil(data, "No data was downloaded.") // Fulfill the expectation to indicate that the background task has finished successfully. expectation.fulfill() } // Start the download task. dataTask.resume() // Wait until the expectation is fulfilled, with a timeout of 10 seconds. wait(for: [expectation], timeout: 10.0) }
Asynchronous Tests and Expectations
User Interface Tests
ユーザーインターフェースのテストを行うために、スクリーンショットを撮る機能が追加されました。
メイン画面を撮る場合です。
let screenshot = XCUIScreen.main.screenshot()
全てのスクリーンショットを撮る場合です。
let allScreenshots = XCUIScreen.screens.map { screen in return screen.screenshot() }
最後に
多くの機能が追加されました。
非同期のテストやスクリーンショットを撮る機能がとうとう公式でサポートされました。
今まではサードパーティのテストフレームワークに頼っていたところがありましたが、公式のサポートは大きいですよね。
いずれ使い分けをするようなノウハウが公開されるのでしょうか?
この辺りも随時キャッチアップしてまいります。
ドキュメント
What's New in Testing
XCTest
Asynchronous Tests and Expectations
User Interface Tests