dtr*_*enz 8 ios xcode7 xcode-ui-testing
我一直试图在Xcode 7自动UI测试中拦截和存根/模拟HTTP请求,使用像OHHTTPStubs这样的工具,没有运气.
以下是我尝试在UI测试文件的setUp方法中使用OHHTTPStubs捕获任何HTTP请求的示例:
override func setUp() {
super.setUp()
let matcher: OHHTTPStubsTestBlock = { (request) -> Bool in
return true
}
OHHTTPStubs.stubRequestsPassingTest(matcher) { (response) -> OHHTTPStubsResponse! in
return OHHTTPStubsResponse.init()
}
}
Run Code Online (Sandbox Code Playgroud)
有没有关于UI测试工作的方式可以防止这种情况?有没有人能够实现这一目标?
dtr*_*enz 10
正如马亭正确地指出,由于UI测试是如何工作的,你不能直接在运行时的应用程序进行交互,因此任何HTTP嘲讽或之类的东西操纵NSUserDefaults的XCUITestCase,不会影响您的应用程序.
如果你真的需要能够嘲笑HTTP或设置和拆毁你的应用环境,特定的UI测试,你将需要设置启动参数或启动应用程序之前推出的环境变量setUp()的方法XCUITestCase,然后修改您的应用程序代码读启动参数或环境变量并引导测试环境.
示例TestCase
class MyTestCase: XCTestCase {
/**
Called before each test in this test case.
*/
override func setUp() {
super.setUp()
let app = XCUIApplication()
app.launchArguments = [ "STUB_HTTP_ENDPOINTS" ]
app.launch()
}
}
Run Code Online (Sandbox Code Playgroud)
示例AppDelegate
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
#if DEBUG
if (NSProcessInfo.processInfo().arguments.contains("STUB_HTTP_ENDPOINTS")) {
// setup HTTP stubs for tests
}
#endif
return true
}
Run Code Online (Sandbox Code Playgroud)
注意:为了使用像OHHTTPStubs此示例中的HTTP模拟框架,您需要使用的存根代码和任何JSON夹具都需要位于您的应用目标中,而不是测试目标.
这是一个非常有用的线程来阅读这个主题:https://github.com/AliSoftware/OHHTTPStubs/issues/124
| 归档时间: |
|
| 查看次数: |
2914 次 |
| 最近记录: |