从XCTestCase访问项目代码 - UI测试

时间:2017-02-13 10:31:29

标签: ios xcode xctest xcode-ui-testing

我正在尝试在我的项目中设置UI测试。我正在进行UI测试,试图通过我的应用程序登录提示登录。为了确保在测试启动时显示登录提示,我正在尝试运行项目代码库中的ServerManager.logout()。这将导致在启动时显示登录提示。

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("test@test.com")

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

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

如何设置项目以访问ServerManager

当我在ServerManager.swift文件上检查目标成员资格的UITest目标(称为DonkeyProductionUITests)时,Xcode开始抱怨该文件中的许多引用未定义为UITest目标。所以我将项目中所有文件的目标成员资格添加到UITest目标,包括所有CocoaPods。它解决了大多数问题。我还有一些奇怪的剩菜:

Undefined reference

UITest目标应具有哪些源文件作为“编译源”?

为什么类似UIColorUIViewController的类型突然无法被Xcode识别?

1 个答案:

答案 0 :(得分:12)

只能在 UnitTests 中通过@testable import访问项目代码。当您运行 UITests 时,这不起作用,因为在UITest期间,您的测试类无法访问您应用的代码。

来自Apple's Docs

  

UI测试与基本方式的单元测试不同。单元测试   使您能够在应用程序的范围内工作,并允许您锻炼   功能和方法,可以完全访问您的应用程序的变量和   州。 UI测试以与用户相同的方式练习应用程序的UI   无法访问应用程序的内部方法,功能和   变量。这使您的测试能够以与用户相同的方式查看应用程序   确实暴露了用户遇到的UI问题。

如果您想在测试后注销,则必须通过应用的用户界面进行注销:如果您的应用中某处有注销按钮,请在测试结束时导航并进行测试tap()