如何测试所需的init(编码器:)?

Bar*_*zyk 8 unit-testing swift xcode7.1beta

在我的自定义类中,WLNetworkClient我必须实现这样的方法:

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
Run Code Online (Sandbox Code Playgroud)

我不需要使用它,但我想测试这个以实现100%的代码覆盖率.你知道如何实现这个目标吗?

我尝试了以下方式但没有成功:

let nc = WLNetworkClient(coder: NSCoder())
XCTAssertNotNil(nc)
Run Code Online (Sandbox Code Playgroud)

Rud*_*vič 7

生产代码:

required init?(coder: NSCoder) {
    return nil
}
Run Code Online (Sandbox Code Playgroud)

测试:

func testInitWithCoder() {
    let archiverData = NSMutableData()
    let archiver = NSKeyedArchiver(forWritingWithMutableData: archiverData)
    let someView = SomeView(coder: archiver)
    XCTAssertNil(someView)
}
Run Code Online (Sandbox Code Playgroud)

由于所需的初始化程序返回nil并且不使用编码器,因此上述代码可以简化为:

func testInitWithCoder() {
    let someView = SomeView(coder: NSCoder())
    XCTAssertNil(someView)
}
Run Code Online (Sandbox Code Playgroud)

  • 对我来说失败(Xcode 9.3,Swift 4.1):`测试失败:testInitWithCoder()失败:失败:捕获“NSInvalidArgumentException”,“*** -decodeObjectForKey:只为抽象类定义。定义-[NSKeyedArchiver decodeObjectForKey:]!” ` (3认同)