我想运行等待浏览器响应的测试。在XCTestCase中使用URL方案
测试目标有一个Info.plist,我可以在其中注册自定义URL方案。但那些从来没有被称为。我知道测试目标不是真正的应用程序。
有没有办法?
编辑(对于赏金):我想为一个叫openUrl("tel://" + some phone number)
的类写一个集成测试。如何在XCTestCase中订阅此URL方案?
我想运行等待浏览器响应的测试。在XCTestCase中使用URL方案
测试目标有一个Info.plist,我可以在其中注册自定义URL方案。但那些从来没有被称为。我知道测试目标不是真正的应用程序。
有没有办法?
编辑(对于赏金):我想为一个叫openUrl("tel://" + some phone number)
的类写一个集成测试。如何在XCTestCase中订阅此URL方案?
我不确定你到底想要测试什么。我认为这不仅仅是URL是否可以打开。下面的测试用例检查FaceTime是否会打开并可以打开一个URL。如果您正在测试的应用程序注册了自定义方案,则只需更改pathToTestApplication
即可使用。
class NSURL_SchemeTests: XCTestCase {
func testWhoHandlesSchemeTel() {
let testAppURL = NSURL(string: pathToTestApplication)
// create a NSURL for the test
let tel = "tel:5555555555"
let url = NSURL(string: tel)
XCTAssert(url != nil, "Could not create a URL from \(tel)")
// determine whether any application is registered to handle the URL
let workspace = NSWorkspace.sharedWorkspace()
let urlHandler = workspace.URLForApplicationToOpenURL(url!)
XCTAssert(urlHandler != nil, "No application found to open URL \(tel)")
// determine whether the expected test application is registered to handle the URL
XCTAssert(urlHandler! == testAppURL,
"Application \(pathToTestApplication) was not registered to handle URL \(tel)")
// attempt to open the URL
XCTAssert(workspace.openURL(url!), "Could not open URL \(tel)")
}
}
我想测试我的应用程序是否已成功注册到URL方案,并且在myapp://打开时是否获得回调。 – McZonk 2015-04-28 14:24:40
这个XCT代码的一部分测试目标将确实测试您的应用程序是否已注册以处理该方案。最后的测试也将决定它是否成功与应用程序通信。但是,如果您想查看应用程序实际从测试应用程序接收到的内容,则必须自行对应用程序进行测试。 – 2015-04-28 14:27:37
问题被重新标记到OS X,所以我的答案是不再有效
原来的答复
这是不可能的。基本原因是测试连接到一个正在运行的应用程序实例,它们无法控制设备,它们作为应用程序的一部分运行。您可能可以打开该URL,但无法返回到应用程序并执行断言。
另请注意,XCUnit是单元测试框架。您将无法编写高级集成测试。使用UI自动化可能会更成功,但即使是这样,这个特定的测试案例也会非常复杂。例如,要通过模拟器中的应用程序打开链接,可以创建一个HTML页面,该页面将重定向到该链接,然后使用shell执行open testLink.html -a "iOS Simulator"
。但是,我认为这种测试是不可靠的,而且很难编写和调试。
我的建议是:
[UIApplication openURL:]
并验证您传递正确的URL给它。或者,如果您想要另一个方向,请编写一个单元测试,以被调用的顺序调用UIApplicationDelegate
方法,模拟您的应用程序打开链接。这是迄今为止您可以使用XCUnit。
你能用NSURLProtocol实现你所需要的吗? – 2015-04-23 03:12:33
您可以通过'订阅URL方案'来重新表达您的意思吗?你的意思是,你如何确定分配哪个应用程序来处理特定的方案?或者你的意思是,你如何测试openURL是否实际执行操作? – 2015-04-23 18:27:47
我的应用程序被注册到这样的URL方案:myapp://。我想测试是否可以在浏览器中打开http://mywebsite.com,最终将重定向到myapp://。 – McZonk 2015-04-24 07:51:06