使用泛型参数对函数进行快速单元测试
Posted
技术标签:
【中文标题】使用泛型参数对函数进行快速单元测试【英文标题】:Swift unit testing of function with generic parameter 【发布时间】:2017-06-22 12:03:08 【问题描述】:我有一个函数定义如下:
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
。
这个函数编译、构建和工作正常(当不是单元测试时)。
知道如何测试吗?
【问题讨论】:
func parse<T: Mappable>(_ data: Data, _ completion: (Result<[T]>) -> Void)
这行不是导致任何错误吗?
【参考方案1】:
错误说明无法推断完成处理程序中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)
)
【讨论】:
感谢您的及时回复,原来如此。我被直接指向parse
函数而不是块内的 result
的错误误导了。
是的,有时 Xcode 的视觉错误标志可能会产生误导。很高兴我能帮上忙!以上是关于使用泛型参数对函数进行快速单元测试的主要内容,如果未能解决你的问题,请参考以下文章
对使用 gorilla/mux URL 参数的函数进行单元测试