我有一個日期數組,我想從NSDateFormatter獲取NSDate對象。什麼是單元測試NSDateFormatter的好方法?
let dates = [
"Tue, 04 Feb 2014 22:03:45 Z",
"Sun, 05 Jun 2016 08:35:14 Z",
"Sun, 05 Jun 2016 08:54 +0000",
"Mon, 21 Mar 2016 13:31:23 GMT",
"Sat, 04 Jun 2016 16:26:37 EDT",
"Sat, 04 Jun 2016 11:55:28 PDT",
"Sun, 5 Jun 2016 01:51:07 -0700",
"Sun, 5 Jun 2016 01:30:30 -0700",
"Thu, 02 June 2016 14:43:37 GMT",
"Sun, 5 Jun 2016 01:49:56 -0700",
"Fri, 27 May 2016 14:32:19 -0400",
"Sun, 05 Jun 2016 01:45:00 -0700",
"Sun, 05 Jun 2016 08:32:03 +0000",
"Sat, 04 Jun 2016 22:33:02 +0000",
"Sun, 05 Jun 2016 01:52:30 -0700",
"Thu, 02 Jun 2016 15:24:37 +0000"
]
我與GWT模式走,但感覺怪怪的結構我的單元測試一樣,因爲我需要編寫各種情況下的十多種不同的測試funtions。
任何人都可以提出一個更好的方法嗎?或者這是「Given,When,Then」模式的可接受用法?
..我真的不希望有一個testRFC822DateFormatter1(),testRFC822DateFormatter2(),testRFC822DateFormatter3(),...
func testRFC822DateFormatter() {
// Given
let rfc822DateFormatter = RFC822DateFormatter()
let dateString = "Tue, 04 Feb 2014 22:03:45 Z"
// When
let date = rfc822DateFormatter.dateFromString(dateString)
// Then
XCTAssertNotNil(date)
let components = NSCalendar.currentCalendar().components([.Year, .Month, .Day, .Hour, .Minute, .Second, .TimeZone, .Calendar], fromDate: date!)
XCTAssertEqual(components.day, 4)
XCTAssertEqual(components.month, 2)
XCTAssertEqual(components.year, 2014)
XCTAssertEqual(components.hour, 22)
XCTAssertEqual(components.minute, 3)
XCTAssertEqual(components.second, 45)
XCTAssertEqual(components.timeZone?.daylightSavingTimeOffset, 3600)
XCTAssertEqual(components.timeZone?.secondsFromGMT, 3600)
XCTAssertEqual(components.calendar?.calendarIdentifier, NSCalendarIdentifierGregorian)
}
謝謝!
我很好奇你爲什麼寫自己的日期格式化程序而不是使用'NSDateFormatter'? –
我是,它實際上是NSDateFormatter的一個子類。我不知道這種格式可能是什麼,只是它符合3個可能的RFC規範中的1個,不幸的是,它需要與上面的RFC(RFC822)一起放鬆。 – nmdias
我假設字符串數組只是一個有代表性的樣本? (否則,你可以創建一個NSDate數組並且完成它。) –