func webVIEw(_ webVIEw: WKWebVIEw,decIDePolicyFor navigationAction: WKNavigationAction,decisionHandler: @escaPing (WKNavigationActionPolicy) -> VoID) { guard let url = navigationAction.request.url else { decisionHandler(.cancel) return } if url.absoluteString != "https://my-approved-url" { decisionHandler(.cancel) return } decisionHandler(.allow)}@H_502_7@我希望我的单元测试能够确保使用基于WKNavigationAction的request.url的正确WKNavigationActionPolicy调用decisionHandler. @H_502_7@但是,我无法弄清楚如何测试这个功能.当我运行我的测试项目时,在webvIEw上调用.load()不会触发委托函数.我也试图直接调用这个函数来测试它,但似乎不可能实例化我自己的新WKNavigationAction(.request是只读的). @H_502_7@在WKNavigationDelegate函数中单元测试逻辑的正确方法是什么?解决方法 直接调用委托方法是单元测试环境中最合适的方法.您可以继承WKNavigationAction,并将该类的实例作为输入参数传递给delegate方法: @H_502_7@ @H_502_7@
class FakeNavigationAction: WKNavigationAction { let testRequest: URLRequest overrIDe var request: URLRequest { return testRequest } init(testRequest: URLRequest) { self.testRequest = testRequest super.init() }}@H_502_7@后来,在单元测试中: @H_502_7@
// setupvar receivedPolicy: WKNavigationActionPolicy?let fakeAction = FakeNavigationAction(testRequest: ...)// actdelegateObject.webVIEw(webVIEw,decIDePolicyFor: fakeAction,decisionHandler: { receivedPolicy = })// assertXCTAssertEqual(receivedPolicy,theExpectedValue)@H_502_7@另一种方法是将getter转换为请求,因为WKNavigationAction是一个Objective-C类,但这更像是一个Hacky解决方案. 总结
以上是内存溢出为你收集整理的swift – 单元测试WKNavigationDelegate函数全部内容,希望文章能够帮你解决swift – 单元测试WKNavigationDelegate函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)