2015-02-26 5 views
1

Я написал класс Date, который добавляет/вычитает дни/месяцы/годы с учетом високосных годов. Теперь мне нужно написать тестовую программу с жестко закодированными данными для проверки моей реализации. Самый простой способ - создать «ссылочную» дату, а затем создать цикл, который переносит его вперед один день за раз, скажем, 3-летнего периода (включая високосный год), а затем распечатывать контрольную дату вместе с некоторыми другими даты, построенные относительно этого. У меня не так много опыта работы с java, поэтому мне интересно, как я на самом деле это сделаю?Тестовая программа для класса даты

+2

Во-первых, я постараюсь избежать присвоения классу такого же имени, как класс в java.util. Затем мы не можем сказать, как вы это сделаете, не видя, какие операции поддерживает ваш класс. Есть ли операция «добавить день»? Является ли это неизменным (что является хорошей идеей)? Нам нужно больше контекста, чтобы помочь вам. –

ответ

2

На самом деле вам не нужно проверять все эти случаи. Подумайте о тестировании случаев, представляющих набор.

т. Е. Не имеет смысла тестировать данную дату и на следующий день после того, как внутренне будет вести себя одинаково (если мы не говорим об февраля, у которого есть дополнительный день каждые четыре года).

Попробуйте создать один тест на каждый случай. Например, я проверил бы случайную дату, месяц с 31 днем, другой с 30 февраля в качестве специального случая, что бы произошло, если null передан функции.

Таким образом, если что-то пойдет не так, вы легко узнаете, что происходит.

1

, чтобы пропустить даты, добавив 1 день, будет работать, но, на мой взгляд, это сложно. Имея несколько примеров будет достаточно:

(псевдо-код) для високосного года

// assuming 1996-02-28 is a leap year which i have not verified 
MyDate feb28th = createDate("1996-02-28"); 
feb28th.addDays(1); 
AssertEquals("1996-02-29", feb28th.toString()); 

(псевдо код) для не високосного года

MyDate feb28th = createDate("1997-02-28"); 
feb28th.addDays(1); 
AssertEquals("1997-03-01", feb28th.toString()); 

может быть, вам также нужно одно испытание для каждого специального случаи, как

  • "не каждые 400 лет"