在XCTest中以swift方式模拟对象的最佳方法是什么?

时间:2014-07-02 04:06:55

标签: mocking swift xctest

在XCTest中使用swift模拟对象的最佳方法是什么? 它只是在具有所需功能的函数内定义类吗? 或者存在更好的选择?

2 个答案:

答案 0 :(得分:0)

您可以使用MockFive执行协议模拟和类模拟。它记录调用的方法和传入的参数,并允许您在运行时存根方法,因此您只需编写一个模拟并在每个测试的基础上对其进行配置。我写了一篇关于如何使用它的文章here

答案 1 :(得分:0)

我建议使用Cuckoo,这与Mockito类似。

示例类:

class ExampleObject {

    var number: Int = 0

    func evaluate(number: Int) -> Bool {
        return self.number == number
    }

}

class ExampleChecker {

    func check(object: ExampleObject) -> Bool {
        return object.evaluate(5)
    }

}

示例测试:

@testable import App
import Cuckoo
import XCTest

class ExampleCheckerTests: XCTestCase {

    func testCheck() {
        // 1. Arrange
        let object = MockExampleObject().spy(on: ExampleObject())
        stub(object) { object in
            when(object.evaluate(any())).thenDoNothing()
        }
        let checker = ExampleChecker()

        // 2. Action
        checker.check(object)

        // 3. Assert
        _ = verify(object).number.get
        verify(object).evaluate(any())
        verifyNoMoreInteractions(object)
    }

}