テスト実行時の成果物を保存する
XCTAttachment
によって、文字列、画像、XCUITestでのスクリーンショットなどを成果物として保存できる。
テスト実行時の追加情報(APIレスポンスなど)を保存するとテスト失敗時の調査が捗る。
■ 使用例
import XCTest import UIKit class SampleTestCases: XCTestCase { func testAttachment() { // 'Hello'という文字列を保存する対象として指定 let attachment = XCTAttachment(string: "Hello!") // name プロパティに値をセット(設定は任意) // 省略した場合、public.plain-text など自動で命名される attachment.name = "実行時のログ" add(attachment) // デフォルト設定では、失敗したときのみ XCTAttachment は保存される! XCTFail() } }
テスト成功時も成果物が保存されるようにするには?
方法は2種類ある。
宣言 | 用途 |
---|---|
XCTAttachment.Lifetime に .keepAlways を設定する | 個別の設定 |
テストのスキーム設定で挙動を変更 | 全体的な設定 |
XCTAttachment.LifeType を指定する場合
XCTAttachment.LifeTime
(enum)には以下のうちいずれかを設定できる。
種類 | 説明 |
---|---|
.deleteOnSuccess | テスト成功時に成果物を破棄(デフォルト設定) |
.keepAlways | 常に成果物を保存 |
■ 使用例
import XCTest import UIKit class SampleTestCases: XCTestCase { func testAttachment() { let attachment = XCTAttachment(string: "Hello!") attachment.name = "実行時のログ" // 常に成果物を保存するように設定を変更 attachment.lifetime = .keepAlways add(attachment) } }
テストのスキーム設定で変更する場合
⌘ + >
でスキームの設定画面を開く- 左側の「Test」を選択
- Option タブを選択し、 「Delete when each test succeeds」のチェックを切り替える
注意点!
この設定はデフォルト設定を変更するものであるため、個別で設定されているものがあればそちらが優先される。
import XCTest import UIKit class SampleTestCases: XCTestCase { func testAttachment() { let attachment = XCTAttachment(string: "Hello!") attachment.name = "実行時のログ" // この設定が優先される attachment.lifetime = .keepAlways add(attachment) } }