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)
}
})
}
我有一个函数定义如下:
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)
}
})
}