我目前正在使用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
}