大佬教程收集整理的这篇文章主要介绍了ios – 调用异步方法的方法的单元测试,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
func reset() { initializeAnythingElse() { // AnythingElse } initializeHomeData() { // HomeData } } func initializeHomeData(callBACk: @escaping (()-> Void)) { getHomeConfig() { callBACk() } } func initializeAnythingElse(callBACk: @escaping (()-> Void)) { getAnythingElse() { callBACk() } }
我想为该代码编写一个单元测试.对于initializeHomeData和initializeAnythingElse,我可以编写单元测试,如:
func tesTinitializeHomeData() { let successExpectation = expectation(description: "") sut.initializeHomeData { successExpectation.fulfill() } waitForExpectations(timeout: 1.0,handler: nil) // Validation goes here } func tesTinitializeAnythingElse() { let successExpectation = expectation(description: "") sut.initializeAnythingElse { successExpectation.fulfill() } waitForExpectations(timeout: 1.0,handler: nil) // Validation goes here }
我的问题是,如何测试reset()?我应该在testReset()中调用它们,如:
func testReset() { tesTinitializeHomeData() tesTinitializeAnythingElse() }
但我认为这不是适当的实施.
话虽这么说,重置目前的编写方式使其不可测试.您能够如此轻松地测试其他独立方法的原因是因为回调参数都接受了.
我建议你重写重置以允许两个可选的回调,如下所示:
typealias CallBACk = () -> () func reset( homeDataCallBACk: @escaping CallBACk? = nil,anythingElseCallBACk: @escaping CallBACk? = nil) { initializeAnythingElse() { anythingElseCallBACk?() } initializeHomeData() { homeDataCallBACk?() } }
现在,您的测试方法需要在编写时考虑某种同步原语,因为从逻辑上讲,只有当主数据和其他任何内容都完成并且调用了它们的回调时,才能完成重置.
func testReset() { let expectation = expectation(description: "reset() completes within some duration") // some mechanism to synchronize concurrent tasks // I am using a semaphore let s = DispatchSemaphore(value: 0) let homeCallBACk: CallBACk = { s.signal() // signals the completion of home data init } let anythingElseCallBACk: CallBACk = { s.signal() // signals the completions of anything else setup } // call your reset method as part of the test reset(homeDataCallBACk: homeCallBACk,anythingElseCallBACk: anythingElseCallBACk) // we kNow we need to wait for two things to complete // init home data and anything else,so do that s.wait() s.wait() // at this step,reset's internal async methods // have completed so we can Now // fulfill the expectation expectation.fulfill() }
请注意,所有这些更改都是纯粹允许您测试重置调用所必需的.函数签名允许您在现有代码中将reset()写为current,因为它具有可选参数,默认值都设置为nil.
以上是大佬教程为你收集整理的ios – 调用异步方法的方法的单元测试全部内容,希望文章能够帮你解决ios – 调用异步方法的方法的单元测试所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。