获取传递给完成处理程序以进行单元测试的值
Posted
技术标签:
【中文标题】获取传递给完成处理程序以进行单元测试的值【英文标题】:get value passed to completion handler for unit testing 【发布时间】:2018-04-16 18:45:22 【问题描述】:我正在尝试将值传递给完成处理程序以进行单元测试。这不是完成处理程序的正常设置,因为完成处理程序是一个 var:
typealias ResultType = Result<Data>
typealias CompletionType = (ResultType) -> ()
var onCompletion: CompletionType// this is the completion handler
open override func finished(_ errors: [NSError])
self.urlSession.invalidateAndCancel()
self.onCompletion(Result.failure(EComError.networkError(.notReachable)))
我正在尝试将 var: onCompletion 与
进行比较self.onCompletion(Result.failure(EComError.networkError(.notReachable)))
但是当我尝试打印 var: onCompletion 后,函数返回:
Optional((Function))
我正在尝试编写这样的测试用例:
func test_finishedResult()
sut?.finished([NSError(code: OperationErrorCode.executionFailed)])
XCTAssertEqual(sut?.onCompletion(Result.failure(EComError.networkError(.notReachable))), sut?.onCompletion)
但它返回错误:
无法转换“DownloadOperation.CompletionType”类型的值? (又名 'Optional ()>') 到预期的参数类型'()?'
在哪里
下载操作
是函数所在类的名称。
对 var 进行单元测试的最佳方法是什么:
完成时
等于self.onCompletion(Result.failure(EComError.networkError(.notReachable)))
?
【问题讨论】:
【参考方案1】:在您的测试代码中,您不是比较传递给完成的值,而是比较回调的函数指针。
你可能想要的是这样的:
func test_finishedResult()
// Set your callback here
sut?.onCompletion = result in
// Compare the result here
XCTAssertEqual(Result.failure(EComError.networkError(.notReachable)), result)
// Trigger the callback with the finished method
sut?.finished([NSError(code: OperationErrorCode.executionFailed)])
【讨论】:
这太棒了!像魅力一样工作。以上是关于获取传递给完成处理程序以进行单元测试的值的主要内容,如果未能解决你的问题,请参考以下文章