我目前正在使用 Swift。
我的问题很简单,如何对在数据库中使用 NSDate() 作为属性创建对象的方法进行单元测试?
问题是,在我的断言中,我将像这样创建一个新的 NSDate():
let expectedObject = Object(data: NSDate())
XCTAssertEqual(database.objects(), [expectedObject])
断言将失败,因为 2 个 NSDates 略有不同。
谢谢。
最佳答案
正如 https://testdriven-ios.com 中指出的那样
一个很好的方法是覆盖测试用例中的 NSDate.date 强制它返回一个已知的日期
@implementation NSDate (custom)
+ (instancetype)date{
NSDateFormatter* formatter = NSDateFormatter.new;
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ssZZZ"];
return [formatter dateFromString:@"2017-12-28 13:00:10+0000"];
}
@end
然后在任何调用 NSDate.date 的地方,都会返回 2017-12-28 13:00:10+0000
@implementation NSDate (custom)
+ (instancetype)date{
NSDateFormatter* formatter = NSDateFormatter.new;
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ssZZZ"];
return [formatter dateFromString:theDate];
}
@end
您甚至可以使用静态date
变量进一步自定义它,然后在测试中修改它
-(void) test_something_out {
theDate = @"2017-12-28 13:00:10+0000";
//Test any function that uses nsdate.date
}
关于ios - 如何对调用 NSDate() 的方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893734/