iOS UIテストを実行するJenkinsジョブがあり、テスト実行中に特定の実行時情報に基づいていくつかのテスト(またはテストクラス)を無視できるようにする必要があります。 XCTestSuiteのドキュメントhttps://developer.apple.com/reference/xctest/xctestsuiteによれば、プログラムでカスタムテストスイートを作成できますが、実際に行う方法の例は見つかりませんでした。だから、どれくらい正確に行くのですか?XCTestSuiteの使い方は? (Swift 3)
私はこれを出発点として以下のコードでおもしろいが、実際にはどこにもいない。 IgnoreThisClassがXcodeで実行されると、BaseTestClassのsetUp()のtestCaseCountがスイート内で0テストを報告しても、その中のテストメソッドが実行されます。代わりにinit()メソッドをオーバーライドする必要がありますか?どんなヒントも大歓迎です!
import XCTest
class BaseTestClass: XCTestCase {
var runThis: Bool?
override func setUp() {
if runThis != nil {
let suite = XCTestSuite(name: "Custom suite")
if runThis! {
suite.addTest(self)
}
print("Testcases in suite \(suite.testCaseCount)")
// This causes an error that the suite has already started,
// even though this call is present in Apple's example documentation.
//suite.run()
}
XCUIApplication().launch()
}
override func tearDown() {
super.tearDown()
}
}
// Run this.
class RunThisClass: BaseTestClass {
override func setUp() {
super.runThis = true
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testThis() {
print("Test class was run.")
}
}
// Don't run this.
class IgnoreThisClass: BaseTestClass {
override func setUp() {
super.runThis = false
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testIgnoreThis() {
print("Ignored class was run.")
}
}
実行するテストのリストを動的に再構築する場合の例を挙げることができますか?特定のテストを移動してテストバンドルを分離し、それを条件付きで実行するだけですか? – Andy
たとえば、iOS 10を実行しているデバイスではテストのいくつかが違って失敗/動作していますが、iOS 9を実行しているデバイスでは以前と同じように動作しますが、アプリケーション機能自体は変更されていません。したがって、すでに長いテストランタイムを削減するために、私たちがそれらを修正するまで、失敗テストがiOS 10デバイスで実行されることを偽陽性として止めたいと考えています。すでに100以上のテストを受けており、毎日多くのことを書いていますので、避けることができれば別々のテストバンドルを保守しないでください。 – sjalv