如何在Xcode 7中通过UI测试在iOS应用程序中运行代码?

时间:2015-11-29 04:46:00

标签: xcode7 xcode-ui-testing

有没有办法在Xcode 7中通过UI测试在应用程序中运行代码?这可以通过应用程序测试(因为测试在应用程序中运行),但对于UI测试来说似乎并不是一种简单的方法。

有没有人找到解决方法?

3 个答案:

答案 0 :(得分:2)

在您正在通过UI测试执行应用的应用中运行代码的最直接方式是提供launchArguments via XCUIApplication

ui测试代码

import XCTest

class UITestUITests: XCTestCase {

    override func setUp() {
        super.setUp()
        let app = XCUIApplication()
        app.launchArguments += ["-anargument", "false","-anotherargument","true"]
        app.launch()
    }

}

应用代码

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    print("All arguments: \(NSProcessInfo.processInfo().arguments)\n\n")
    print("anargument: \(NSUserDefaults.standardUserDefaults().boolForKey("anargument"))")
    print("anotherargument: \(NSUserDefaults.standardUserDefaults().boolForKey("anotherargument"))")
    return true
}
从ui测试启动时

app输出:

All arguments: ["/...../AnApp.app/UITest", "-anargument", "false", "-anotherargument", "true"]

anargument: false
anotherargument: true

答案 1 :(得分:1)

UI测试在与您的应用分开的流程中运行。目前,从Xcode 7.1.1开始,无法直接与框架中的生产应用程序代码进行交互。

每次互动都必须通过可访问性进行路由。这意味着您可以连接一个在您的应用中执行代码的按钮,然后让测试调用该按钮。这显然是不可扩展的,我建议反对它。

也许有另一种方法来实现你的目标?你到底想要完成什么?

答案 2 :(得分:0)

我正考虑在测试时将环境变量传递给应用程序,以启动嵌入式HTTP服务器。然后我可以通过服务器与应用程序通信。疯了吧?然而,我无法相信没有人这样做过。

我最关心的是这种方法是嵌入式服务器将在生产应用程序中。我不确定这是否是一个问题,或者是否只是在运行UI测试时只包含它的简单方法。