获取传递给完成处理程序的值以进行单元测试
get value passed to completion handler for unit testing
我正在尝试将值传递给完成处理程序以进行单元测试测试。这不是完成处理程序的正常设置,因为完成处理程序是一个 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 时 returns:
Optional((Function))
我正在尝试编写这样的测试用例:
func test_finishedResult(){
sut?.finished([NSError(code: OperationErrorCode.executionFailed)])
XCTAssertEqual(sut?.onCompletion(Result.failure(EComError.networkError(.notReachable))), sut?.onCompletion)
}
但是 returns 错误:
Cannot convert value of type 'DownloadOperation.CompletionType?' (aka
'Optional<(Result) -> ()>') to expected argument type '()?'
其中
DownloadOperation
是 class 函数所在的名称。
什么是对变量进行单元测试的最佳方法:
onCompletion
等于self.onCompletion(Result.failure(EComError.networkError(.notReachable)))
?
对于您的测试代码,您不是在比较传递给完成的值,而是在比较回调的函数指针。
您可能想要的是:
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)])
}
我正在尝试将值传递给完成处理程序以进行单元测试测试。这不是完成处理程序的正常设置,因为完成处理程序是一个 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 时 returns:
Optional((Function))
我正在尝试编写这样的测试用例:
func test_finishedResult(){
sut?.finished([NSError(code: OperationErrorCode.executionFailed)])
XCTAssertEqual(sut?.onCompletion(Result.failure(EComError.networkError(.notReachable))), sut?.onCompletion)
}
但是 returns 错误:
Cannot convert value of type 'DownloadOperation.CompletionType?' (aka 'Optional<(Result) -> ()>') to expected argument type '()?'
其中
DownloadOperation
是 class 函数所在的名称。
什么是对变量进行单元测试的最佳方法:
onCompletion
等于self.onCompletion(Result.failure(EComError.networkError(.notReachable)))
?
对于您的测试代码,您不是在比较传递给完成的值,而是在比较回调的函数指针。
您可能想要的是:
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)])
}