我正在尝试将值传递给完成处理程序以测试单元测试。它不是完成处理程序的正常设置,因为完成处理程序是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?”类型的值(又名 '可选&lt;(结果) - &gt; ()&gt;')预期参数类型'()?'
其中
DownloadOperation
是函数所在类的名称。
什么是对var进行单元测试的最佳方式:
onCompletion
等于self.onCompletion(Result.failure(EComError.networkError(.notReachable)))
?
答案 0 :(得分:0)
使用您的测试代码,您不是要比较传递给完成的值,而是比较回调的函数指针。
你可能想要的是:
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)])
}