测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年10月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Pim Nijman 维护。
一个受 Sinon.js 启发的 Swift 模拟框架,可以轻松跟踪您的测试替身或将其转换为存根。
Testable 通过 CocoaPods 提供。要安装
它,只需将以下行添加到您的 Podfile 中
pod 'Testable'
假设您有一个测试替身,并希望知道它是否被您当前正在测试的代码调用。
class SomeClass {
func someMethod(foo: Int, bar: Bool) {
//
}
}
通过采用 Spyable 协议并在方法的实现中调用 recordCall(withArgs:),您将能够记录此方法被调用的次数及其参数。
import Testable
class SomeClass: Spyable {
func someMethod(foo: Int, bar: Bool) {
recordCall(withArgs: foo, bar)
}
}
在您的测试中,您现在能够获取一个跟踪此方法调用的间谍的引用。
func testImplementationCallsSomeMethod() {
let someObject = SomeClass()
let someOtherObject = SomeOtherClass(object: someObject)
someOtherObject.doSomething()
let spy = someObject.spy(forMethod: "someMethod(foo:bar:)")
XCTAssertTrue(spy.called)
XCTAssertTrue(spy.calledOnce)
XCTAssertEqual(spy.firstCall.args[0] as? Int, 42)
XCTAssertEqual(spy.firstCall.args[1] as? Bool, true)
}
您可以对测试替身的属性执行相同的操作。
import Testable
class SomeClass: Spyable {
var someProperty: Int {
get { recordGetProperty() }
set { recordSetProperty(withValue: newValue) }
}
}
在您的测试中,您可以获取属性间谍的引用。
func testImplementationGetsAndSetsProperty() {
let someObject = SomeClass()
let someOtherObject = SomeOtherClass(object: someObject)
someOtherObject.doSomethingElse()
let getPropertySpy = counter.spy(forGetProperty: "someProperty")
XCTAssertTrue(getPropertySpy.called)
XCTAssertTrue(getPropertySpy.calledOnce)
let setPropertySpy = counter.spy(forSetProperty: "someProperty")
XCTAssertTrue(setPropertySpy.called)
XCTAssertTrue(setPropertySpy.calledOnce)
XCTAssertEqual(setPropertySpy.firstCall.args[0] as? Int, 0)
}
即将推出…
Pim Nijman,@pnijman
Testable 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。