2017-02-13 28 views
3

プロジェクトでUIテストをセットアップしようとしています。私は私のアプリのログインプロンプトからログインしようとするUIテストをしています。テストの起動時にログインプロンプトが表示されるようにするには、プロジェクトのコードベースにあるServerManager.logout()を実行しようとしています。これにより、起動時にログインプロンプトが表示されます。私はServerManagerへのアクセスを得るために、私のプロジェクトを設定する必要がありますどのようにXCTestCaseからのプロジェクトコードへのアクセス - UIテスト

import XCTest 

class SmokeTest: XCTestCase { 

    override func setUp() { 
     super.setUp() 

     // Put setup code here. This method is called before the invocation of each test method in the class. 

     // In UI tests it is usually best to stop immediately when a failure occurs. 
     continueAfterFailure = false 
     // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 
     XCUIApplication().launch() 

     // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 
     ServerManager.logout() 
    } 

    func testLogin() { 

     let app = XCUIApplication() 

     let emailTextField = app.textFields["email textfield"] 
     emailTextField.tap() 
     emailTextField.typeText("[email protected]") 

     let passwordTextField = app.secureTextFields["password textfield"] 
     passwordTextField.tap() 
     passwordTextField.typeText("12345678") 

     let loginButton = app.buttons["log in button"] 
     loginButton.tap() 
    } 
} 

?私はServerManager.swiftファイルのUITestターゲット(と呼ばれるDonkeyProductionUITests)のターゲット会員に確認

は、Xcodeはそのファイル内の多くの参照がUITestターゲットに対して未定義だったと文句を始めました。だから私はすべてのCocoaPodを含むUITest TargetにプロジェクトのすべてのファイルのTarget Membershipを追加しました。それはほとんどの問題を解決しました。

Undefined reference

UITest目標は「ソースをコンパイル」として持つべきである何をソースファイル:それでも私はいくつかの奇妙な残り物を持っていますか?

はなぜUIColorUIViewControllerのようなタイプは、突然のXcodeによって、認識されていませんか?

答えて

2

@testable importでプロジェクトのコードにアクセスするのは、UnitTestsでのみ可能です。あなたが実行しているときUITestsこれは動作していません。なぜなら、UITestの間、あなたのテストクラスはあなたのアプリケーションのコードにアクセスできないからです。

Apple's Docsより:

UIテストは、基本的な方法で、ユニットテストとは異なります。ユニットテスト を使用すると、アプリのスコープ内で作業することができ、 の機能とメソッドをアプリの変数に完全にアクセスし、 の状態にすることができます。 UIテストでは、ユーザーのと同じ方法で、アプリの内部メソッド、関数、および 変数にアクセスすることなくアプリのUIを実行します。これにより、ユーザが同じ方法でアプリケーションを見ることができるようになります。ユーザーが遭遇するUIの問題が公開されます( )。

あなたはあなたのアプリケーションのユーザインタフェースを介してそれをしなければならないテストの後にログアウトしたい場合:ログアウトボタンは、あなたのアプリのどこかに存在する場合は、あなたのテストの最後であっナビゲートし、テストtap()を聞かせて。

+0

恐縮です!しかし、ちょっと迷惑なものです。テストが開始されたときにアプリケーションが適切な状態になっていることを確認したいだけですが、これは 'func setup()'のユースケースではないようです。リンゴからの参照? – Wiingaard

+0

はい、少し不便ですが、その周りに道はありません。あなたはテストの後にあなたのアプリのUIを使用してリセットする必要があります。それぞれのテストの後にそれを行う必要がある場合は、そのコードを 'tearDown()'に移動することができます。ここにdocsへのリンクがあります:https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/09-ui_testing.html – joern

+0

あなたがそれを起動するための解決策ではないと思いますか?このソリューションのような引数を持つアプリケーション:http://stackoverflow.com/a/33466038/2299801ありがとう:) – Wiingaard

関連する問題