それが最善の方法ですユニットテスト中にネットワーク通話を使用しないでください。これは模擬データを使った依存性注入のためのものです。
私はかつて、この上の話とサンプルコードはここで見つけることができなかった。https://github.com/karnett/MVVM
は、あなたの実際の質問に展開するには - 私は昔スタックオーバーフロー宇宙の周りに浮いたこの2つの関数を使用します。
func wait(_ duration: TimeInterval, object: XCUIElement)
{
//waits for condition to be met when changing views before continuing tests.
_ = self.expectation(
for: NSPredicate(format: "exists == 1"),
evaluatedWith: object,
handler: nil)
self.waitForExpectations(timeout: duration, handler: nil)
}
func wait(_ duration: TimeInterval, object: XCUIElementQuery, count: Int)
{
//waits for condition to be met when changing views before continuing tests.
_ = self.expectation(
for: NSPredicate(format: "self.count = \(count)"),
evaluatedWith: object,
handler: nil)
self.waitForExpectations(timeout: duration, handler: nil)
}
、あなたがでそれらを呼び出すことができます:あなたのビューをx時間によってロードされない場合
let emailTextField = app.textFields["Email"]
self.wait(2.0, object: app.textFields["Email"])
、ユニットテストは失敗するはずです。単体テストは、1)何も破壊しなかった、2)ユーザーの要件を確認する、3)ユーザーが良い経験をしていることを確認するために存在します。
あなたの答えは、Thxです。うん、私は嘲笑について知っています。それは私の残りの視点で行ったことです.Modelクラス。しかし、私はこのテストでこの特定の方法をカバーしたかったのです。私はここで私のビューコントローラをテストしていないので、私はUI要素にアクセスする必要はありません。 varsとオブジェクトが設定されるまでNSPredicateを使用する必要があります。また、waitForExpectationsはXCTWaiter.wait()に置き換えられました。 – Nikolai