2014-10-01 2 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).

 @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

+0

Как насчет месяцев, которые имеют ровно 30 дней? – rgettman

ответ

1

Одно решение было бы заменить изготовленный на заказ дату арифметику с java.util классов Date и Calendar, если не причина не, чтобы использовать их (например, это упражнение вычисления даты), поскольку эти классы полезности являются стандартными и проверенными.

Для совместимости с классом 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: Это добавляет два дня к дате (29, 2, 2014) , общий год. С 2014-02-29 не является корректной датой, конструктор должен изменить ее на 2014-03-01. Добавление двух дней 2014-03-03, так getDay() должен возвращать 3.

Один из очевидной ошибки в методе addDays(int x) является то, что он не испытывает к x больше одного месяца. Если вы не беспокоятся о том, что код будет медленным для больших 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, который является поддержкой коды проблема. Я предполагаю, что есть также метод subtractDays(); если нет, вам нужно будет пересмотреть свой addDays(), чтобы разрешить отрицательный x.

В вашем конструкторе могут быть проблемы; он должен проверять даты обработки, которые не соответствуют стандартам календаря.

Смежные вопросы