ios - 如何对调用 NSDate() 的方法进行单元测试?

标签 ios unit-testing swift nsdate

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

相关文章:

objective-c - 有什么巧妙的解决方案可以将资源包含在静态库中?

ios - 只允许一根针掉落

java - 使用 gitlab-ci 进行 GUI 测试(java swing)时出现 headless (headless)异常

python - 如何为 Python __del__ 函数编写单元测试用例

ios - 使用 alamofire 上传多个图像,而不使用 swift 中的 for 循环

ios - 检索 ValueForKey BOOL 值

ios - 如何在Swift 3中禁用选项卡栏的用户交互?

c# - 对 WCF 服务的身份验证未使用 SetAuthCookie 和完整的 .net 客户端维护,但可与 silverlight 一起使用

swift - Swift 中的小写字典键

uiviewcontroller - swift + Xcode 6 : What method is called when storyboard segue is performed