如何对协议及其扩展进行单元测试

Amo*_*gam 2 unit-testing protocols swift swift-protocols protocol-extension

我有一个协议,并且在扩展中有它的定义。

我想对定义进行单元测试。

我用谷歌搜索但找不到任何相关内容。

我得到的最接近的是 Mocking with Protocol 或 POP 等。

如果有人可以用示例向我解释,那就太好了。

Joa*_*son 5

不需要对协议本身进行单元测试,您应该测试符合的类型。如果您有一个具有某些默认行为的协议扩展,您想要测试,那么在您的测试目标中创建一些符合该协议的基本结构或类,并在您的测试中使用它。

这是一个示例,给出了以下带有函数的协议和该函数的默认实现

protocol Example {
    func calculate(_ x: Int) -> Int
}

extension Example {
    func calculate(_ x: Int) -> Int {
        x * 2
    }
} 
Run Code Online (Sandbox Code Playgroud)

您可以在测试目标中添加一个简单的结构来测试这一点,因为我们想要测试默认实现,该结构变得非常简单

struct TestExample: Example {}
Run Code Online (Sandbox Code Playgroud)

然后对此进行单元测试可能如下所示

func testDefaultCalculation() {
    let sut = TestExample()
    XCTAssertEqual(2, sut.calculate(1))
}
Run Code Online (Sandbox Code Playgroud)