获取传递给完成处理程序的值以进行单元测试

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)])
    }