今UITestCaseを使用する場合、あなたは
毎回シーケンス(A-> B-> C-> D)を行う必要があり、直接オープンD制御できないすべてのテストケースためスペック原因アプリ重複コードを最小化するためのプロトコルとして、A、B、Cのシーケンス機能を提供するテストケース
ためXCUIテストを使用するサインイン、サインアウトがUITestのために必要とされるべきであるespectially毎回起動
補足的方法
EX)
)ログインプロトコル
protocol Loginable {
var app: XCUIApplication! { get }
func login()
}
extension Loginable {
func login() {
//do login ... typting textfield , tap login button
}
}
がすべてD uitest場合を例にloginedする必要があるため(重複コードを削除するLoginableを使用して、A、B、C、D UITestCaseを拡張定義メイク拡張シーケンス機能は、すべてのケースを再利用するため
代替ソリューションです
使用KIF Functional Test framework
KIFはKIFが
を意味し、ユニットテストのようなあなたのクラスにアクセスすることができます
あなたは(直接rootViewControllerを設定)ウィンドウに自分のDのViewControllerを示し、KIF UItest機能
をテストすることができます代わりにXCUITest XCTestに基づいてUITestをテストすることができますKIF直接ウィンドウ
にrootViewController設定Dコントローラを起動でき
EX)KIF
import XCTest
@testable import YourApp
class DViewControllerTests: XCTestCase {
var sut: DViewController!
var window: UIWindow!
override func setUp() {
super.setUp()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
window = appDelegate.window
sut = //Initialize your D ViewController
window.rootViewController = sut
RunLoop.current.run(until: Date()) // cause viewDidLoad
}
func testSomeCase() {
tester().tapView(withAccessibilityIdentifier: "someIdentifier")
...
}
}
クルーズに感謝します。あなたのソリューションは非常に役立つように見えます。私はそれを実装します。どうもありがとう。 –
@GopeshGupta – Cruz