用于 Spy 对象的 Swift 框架
要创建 Spy 对象,只需在你的测试类中实现 TestSpy 协议。
class TestClass: TestSpy {
enum Method: Equatable {
case test
case testWithArgument(arument: Int)
}
var callstack = CallstackContainer<Method>()
}
然后,当你要测试的方法被调用时,你必须在调用栈中记录该方法。
extension TestClass: TestProtocol {
func test() {
callstack.record(.test)
}
func testWithArgument(argument: Int) {
callstack.record(.testWithArgument(argument: argument))
}
}
XCTAssertTrue(spyObject.check(method: .test, predicate: CallstackMatcher.any))
expect(spyObject).to(haveReceived(.test))
有一些默认匹配器可用于测试,以检查调用栈内容。
主要的匹配器有
XCTAssertTrue(spyObject.check(method: .test, predicate: CallstackMatcher.before(.testWithArgument(argument: 1))))
expect(spyObject).to(haveReceived(.test), .before(.testWithArgument(argument: 1)))
Sourcery 提供了一种自动生成 Spy 对象的好方法。 你可以找到一个示例 stancil 文件来生成 Spy 对象,这里
使用方法
sourcery --sources "$SOURCESPATH" --templates "$TEMPLATESPATH" --output "$OUTPUTPATH" --args module="$CURRENTFRAMEWORKNAME",import="Foundation",import="UIKit"...
// sourcery: autoSpy
$OUTPUTPATH
生成的文件Franco Meloni, franco.meloni91@gmail.com
TestSpy 在 MIT 许可下可用。 有关更多信息,请参见 LICENSE 文件。