2017-02-09 24 views
0

xCode 8のビューコントローラのユニットテストをしようとしています。XCUIを使用して、それを記録、アサート、および実行することができます。しかし、私は、特定のView Controllerを個別にテストしたい。XCUIでのUIテスト

同様に、4つのコントローラA、B、CおよびDが順番に(A→B→C→D)あります。私はCコントローラを直接起動し、それを独立してテストしたい。

私はこのようにテストすることができます。つまり、デフォルトのXCUIApplicationがコントローラを開き、次にBコントローラに移動してからBボタンをクリックすると、Cコントローラに移動します。その後、あなたはそれをテストすることができます。しかし、私は順番に欲しくない。 Cコントローラを直接テストしたい。

他の誰かが同じ種類の仕事をしていたら助けてくれますか? ありがとうございます。 Xcodeの

とXCUITestで

答えて

1

今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") 
     ... 
    } 
} 
+0

クルーズに感謝します。あなたのソリューションは非常に役立つように見えます。私はそれを実装します。どうもありがとう。 –

+0

@GopeshGupta – Cruz

関連する問題