2013-11-04 14 views
15
NSDate *date = [NSDate date]; 
XCTAssertEqual([[store selectedDate] timeIntervalSinceReferenceDate], [date timeIntervalSinceReferenceDate]); 

này mang lại cho tôi thông báo lỗi:XCTAssertEqual: Làm thế nào để so sánh NSDates?

(([[store selectedDate] timeIntervalSinceReferenceDate]) equal to ([date timeIntervalSinceReferenceDate])) failed: 
("405290648.294") is not equal to ("405290648.294") 

tôi đã trước một vấn đề tương tự với số nguyên, mà phải giải quyết bằng cách đúc nó để NSUInteger như mô tả here.

Nhưng tôi không thể hình làm thế nào để giải quyết điều này với các đối tượng NSDate/tăng gấp đôi (như trong trường hợp này).

Trả lời

28

sử dụng XCTAssertEqualWithAccuracy để so sánh số

XCTAssertEqualWithAccuracy([[store selectedDate] timeIntervalSinceReferenceDate], [date timeIntervalSinceReferenceDate], 0.001); 
+0

Cảm ơn bạn! Trong Swift, bạn có thể sử dụng phần này mà không có phần "WithAccuracy". Chỉ cần thêm thông số "chính xác" ở cuối. – Corneliu

0

Vấn đề là hai giá trị double có thể khác với một chữ số quan trọng hơn được hiển thị trong xác nhận (có lẽ là 405290648.2942 so với 405290648.2941).

Nếu bạn không quan tâm đến số giây phân số trong so sánh thì hãy sử dụng round hoặc floor trên cả hai giá trị hoặc truyền cả hai thành long long chẳng hạn.

0

nổi Nếu bạn chạy một thử nghiệm đơn giản bạn có thể thấy rằng các giá trị khác nhau. Thực tế là chúng trông giống nhau trong đầu ra xác nhận có nhiều khả năng nhất là với cách kết quả đầu ra của nhật ký được xây dựng.

NSDate *date = [NSDate date]; 
NSDate *date2 = [NSDate date]; 

NSLog(@"%f %f", [date2 timeIntervalSinceReferenceDate], [date timeIntervalSinceReferenceDate]); //=> 405292099.192900 405292099.192899 

XCTAssertEqual([date2 timeIntervalSinceReferenceDate], [date timeIntervalSinceReferenceDate]); 

Bạn nên sử dụng XCTAssertEqualWithAccuracy vì đây là những yếu double giá trị

1

này nên làm việc, và nên là đủ cho kỳ thi này.

XCTAssertEqualWithAccuracy([refDate timeIntervalSinceReferenceDate], [date timeIntervalSinceReferenceDate],0.00001,@""); 
0

Trong Swift trước đó bạn cần sử dụng này:

let receivedDateTimeInterval = receivedDate.timeIntervalSinceReferenceDate 
let expectedDateTimeInterval = expectedDate.timeIntervalSinceReferenceDate 
XCTAssertEqualWithAccuracy(receivedDateTimeInterval, expectedDateTimeInterval, accuracy: 0.001) 

Bây giờ bạn có thể mất "WithAccuracy" phần:

XCTAssertEqual(receivedDateTimeInterval, expectedDateTimeInterval, accuracy: 0.001) 
Các vấn đề liên quan