2009-01-28 64 views
0

我目前正在使用JUnit 4.4和Java 1.6.x.而最近代碼修復後,我們開始得到這個AssertionFailedError異常在我的JUnit測試的方法:JUnit產生奇怪的AssertionFailedError

UtilityTest.testParseDate(4T):星期一1月15日9時26分07秒的PST 2001年預計:「週一1月15日09: 26:07 PST 2001" ,但是卻是: 「週一1月15日2001年」

junit.framework.AssertionFailedError 9時26分07秒的PST:UtilityTest.testParseDate(4T):星期一1月15日9時26分07秒的PST 2001預期:但是: at UtilityTest.testParseDate(未知來源)

正如您所看到的,預期和實際顯示的內容完全相同, l代碼檢查,我們可以發現代碼中沒有明顯的錯誤。用實際數據測試運行也會產生正確的(預期的)結果。

有沒有人在JUnit中看到過這種行爲,如果是這樣,你找到了原因和/或修復?

我在以前的Java和JUnit自己版本中看到過同樣的情況:發生時總是有點隨意,通常唯一修復「工作」的是從頭開始重新輸入代碼塊。奇怪,但這是消除此錯誤的唯一方法。我試圖在這次行爲中找出更「具體」的東西。

感謝,

- 理查德

回答

2

你能張貼UtilityTest.testParseDate代碼()?

對日期值使用assertEquals()還是以另一種方式比較它們?如果是這樣,你能斷言毫秒時間戳是相等的,而不是日期本身?

+0

感謝捅我的大腦思考毫秒! – Huntrods 2009-01-28 18:06:17

1

測試代碼是:

Calendar cal = Calendar.getInstance(); 
Date today = new Date(); 
cal.set(2001, 0, 15, 9, 26, 07); // Jan 15 2001, 09:26:07 
// format 4 = ddd mmm dd hh:mm:ss TTT yyyy (with gettime) 
assertEquals("UtilityTest.testParseDate(4t): Mon Jan 15 09:26:07 PST 2001", cal.getTime(), Utility.parseDate("Mon Jan 15 09:26:07 PST 2001", today, true)); 

這裏是parseDate樣子(只是方法簽名的代碼很長):

public static Date parseDate(String date, Date today, boolean gettime) { 

我認爲你可能有它雖然 - 即使它不會顯示毫秒,它們會有所不同。

+0

這可能會解釋測試用例傳遞和失敗的明顯「隨機性」。有時這些指令會在不到一毫秒的時間內完成,在這種情況下,您的測試將會起作用。 – Kevin 2009-01-28 03:55:23

0

就是這樣 - 毫秒關閉。 cal.clear()明智的應用程序解決了這個問題。