繁体   English   中英

具有通用参数的功能的Swift单元测试

[英]Swift unit testing of function with generic parameter

我有一个定义如下的函数:

func parse<T: Mappable>(_ data: Data, _ completion: (Result<[T]>) -> Void) {
    completion(Result {
        do {
            let decodedData: Any = try decode(data)
            let checkedArray: [AnyObject] = try check(decodedData)
            let models: [T] = mapToModels(checkedArray)
            return models
        } catch {
            throw error
        }
    })
}

当我尝试运行以下单元测试时:

func testInvalidData() {
    let test = "test"
    let invalidData = test.data(using: .utf8)

    parse(invalidData, { result in
  //^Generic parameter 'T' could not be inferred
        switch result {
        case .success(let users):
            XCTFail()
        case .failure(let error):
            XCTAssertNotNil(error)
        }
    })
}

如上文所述,我得到了Generic parameter 'T' could not be inferred的错误。

否则,此功能可以编译,构建和正常运行(当未进行单元测试时)。

知道如何测试吗?

该错误说明无法推断完成处理程序中的result参数的类型。 这意味着您必须显式声明其类型:

func testInvalidData() {
    let test = "test"
    let invalidData = test.data(using: .utf8)

    parse(invalidData, { (result: Result<[DesiredTypeHere]>) in
    // ^Replace 'DesiredTypeHere' with expected type
        switch result {
        case .success(let users):
            XCTFail()
        case .failure(let error):
            XCTAssertNotNil(error)
        }
    })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM