【发布时间】:2015-04-27 07:04:40
【问题描述】:
我必须测试一些日期计算,但为此我需要在 Swift 中模拟 NSDate()。整个应用程序都是用 Swift 编写的,我也想用它编写测试。
我尝试过方法调配,但它不起作用(或者我做错了什么更有可能)。
extension NSDate {
func dateStub() -> NSDate {
println("swizzzzzle")
return NSDate(timeIntervalSince1970: 1429886412) // 24/04/2015 14:40:12
}
}
测试:
func testCase() {
let original = class_getInstanceMethod(NSDate.self.dynamicType, "init")
let swizzled = class_getInstanceMethod(NSDate.self.dynamicType, "dateStub")
method_exchangeImplementations(original, swizzled)
let date = NSDate()
// ...
}
但date 始终是当前日期。
【问题讨论】:
-
你为什么不简单地关闭你的系统自动日期和时间更新,改变你的计算机的日期并做你的测试
-
我们在连接到 CI 解决方案的远程 mac 上运行测试。我不想太在意那台电脑。
标签: unit-testing swift mocking nsdate method-swizzling