在XCTest中使用swift模拟对象的最佳方法是什么? 它只是在具有所需功能的函数内定义类吗? 或者存在更好的选择?
答案 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)
}
}