XCTAssertEqual:如何比较NSDates?

Hou*_*man 19 unit-testing ios ios7 xctest

NSDate *date = [NSDate date];
XCTAssertEqual([[store selectedDate] timeIntervalSinceReferenceDate], [date timeIntervalSinceReferenceDate]);
Run Code Online (Sandbox Code Playgroud)

这给了我错误信息:

(([[store selectedDate] timeIntervalSinceReferenceDate]) equal to ([date timeIntervalSinceReferenceDate])) failed: 
("405290648.294") is not equal to ("405290648.294")
Run Code Online (Sandbox Code Playgroud)

我以前遇到过与Integers类似的问题,必须通过将其转换NSUInteger此处所述来解决.

但我无法弄清楚如何使用NSDate对象/双精度解决这个问题(如本例所示).

Bry*_*hen 30

用于XCTAssertEqualWithAccuracy比较浮点数

XCTAssertEqualWithAccuracy([[store selectedDate] timeIntervalSinceReferenceDate], [date timeIntervalSinceReferenceDate], 0.001);
Run Code Online (Sandbox Code Playgroud)


Cor*_*nel 6

在早期的 Swift 中你需要使用这个:

let receivedDateTimeInterval = receivedDate.timeIntervalSinceReferenceDate
let expectedDateTimeInterval = expectedDate.timeIntervalSinceReferenceDate
XCTAssertEqualWithAccuracy(receivedDateTimeInterval, expectedDateTimeInterval, accuracy: 0.001)
Run Code Online (Sandbox Code Playgroud)

现在你可以失去“WithAccuracy”部分:

XCTAssertEqual(receivedDateTimeInterval, expectedDateTimeInterval, accuracy: 0.001)
Run Code Online (Sandbox Code Playgroud)