2014-10-01 61 views
0

你好我有一個測試這個問題,因爲我得到一個錯誤,測試是不正確的,你們可以解釋爲什麼,什麼是錯誤?Java類測試問題

public void addDays(int x) { 
    int y = year; 
    day = day + x;  
    if (day > 31) {  
     day = day - 31; 
     addMonths(1); 

    } else if (day >= 29 && month == 2 && (isLeapYear(y))) { 
     day = day - 29; 
     addMonths(1); 
    } else if (day >= 28 && month == 2 && !(isLeapYear(y))) { 
     { 
     day = day - 28; 
     addMonths(1); 

     } 
    } 
    } 

這是我測試這個方法(使用Netbeans的Im)。

 @Test 
    public void testAddDays() { 
    Date z = new Date(31,11,2013); 
    z.addDays(3); 
assertEquals(3, z.getDay()); 

} 
      @Test 
    public void testAddDays1() { 
    Date z = new Date(28,2,2016); 
    z.addDays(3); 
assertEquals(2, z.getDay()); 
} 
       @Test 
    public void testAddDays2() { 
    Date z = new Date(29,2,2014); 
    z.addDays(2); 
assertEquals(3, z.getDay()); 
} 

我想知道哪裏是我的錯誤,我該如何解決這些問題

+4

停止使用片段功能;這意味着嚴格** **客戶端**代碼片段(HTML,JavaScript)** ** – kolossus 2014-10-01 21:11:25

+0

那麼正好有30天的月份呢? – rgettman 2014-10-01 21:12:38

回答

1

一個解決方案是與java.utilDateCalendar,以取代定製的日期計算,除非是有原因的而不是使用它們(例如這是一個日期計算練習),因爲這些實用程序類是標準和經過充分測試。

爲了與Calendar類保持一致,我建議使用(年,月,日)格式,而不是日期,月份和年份。這樣可以更方便地根據java.util結果測試您的代碼。


那麼,來看看你的測試情況下,使用您的Date(date, month, year)格式上,你不能使用java.util假設:

  • testAddDays:這增加了三天的日期(31 ,11,2013)。由於2013-11-31不是格式良好的日期,因此構造函數應將其更改爲2013-12-01。添加三天是2013-12-04,所以getDay()應該返回4.
  • testAddDays1:這會在閏年的日期(28,2,2016)上添加三天。接下來的三天是2016-02-29,2016-03-01和2016-03-02,所以getDay()應該返回2.
  • testAddDays2:這增加了兩天到Date(29,2,2014) ,平常的一年。由於2014-02-29不是格式良好的日期,因此構造函數應將其更改爲2014-03-01。添加兩天2014年3月3日,所以getDay()應該在你的addDays(int x)方法返回3.

一個明顯的缺陷是,它並沒有測試超過一個月更大x

if (x < 0) { 
    subtractDays(x); 
    return; 
} 
day += x; 
while (day > 0) { 
    int daysThisMonth; 
    switch (month) { 
    case 2: daysThisMonth = isLeapYear() ? 29 : 28; break; 
    case 4: case 6: case 9: case 11: daysThisMonth = 30; break; 
    case 1: case 3: case 5: case 7: case 8: case 10: case 12: daysThisMonth = 31; break; 
    default: // ERROR. 
    } 
    addMonths(1); 
    day -= daysThisMonth; 
} 

注意,此代碼依賴於addMonths()忽略day,這是一個代碼維護:如果你不擔心,該代碼將是大x慢,你可以通過所有像這樣的迭代月問題。我假設還有一個subtractDays()方法;如果沒有,則需要修改addDays()以允許負面的x

您的構造函數中可能還有問題;它需要測試不符合日曆標準的處理日期。