2013-10-27 4 views
3

У меня есть два дат классов (давайте назовем их DateV1 и DateV2), один будучи супер и другой вспомогательный, и реализации точно такие же методы.
Начиная с JUnit 4.x, параметризованные тесты, как представляется, предлагают способ протестировать оба класса в рамках одного тестового класса (хотя некоторые люди, похоже, запутались в параметризованных тестах и ​​вообще избегают их).тестирование супер и суб-классы с один тестовый класс

Потому что я новичок в JUnit (и, действительно, Java) и не писал ничего, кроме самых простых тестов, я хотел бы услышать от более опытных пользователей JUnitкак решать ситуации, как эти. Я занимаюсь теорией в JUnit In Action, 2nd Ed., Manning, July 2010, но у меня возникают трудности с тем, как это будет использоваться в супер/суб-сценарии.

Не удивительно, что я не включаю код, потому что, честно говоря, у меня его нет на данный момент. Я не прошу СВЧ-код, но некоторые указатели были бы оценены, чтобы я мог быть на моем веселом пути и не писать кучу шаблонов.

+0

Я могу думать о множестве неуклюжих способов сделать это, но ничего элегантного – tom

ответ

1

Предполагая, что у вас есть такие DateV1 и DateV2:

public class DateV1 { 

    protected final Date date; 

    public DateV1(Date date) { 
     this.date = date; 
    } 

    public int getYear() { 
     return 1900 + date.getYear(); 
    } 
} 

public class DateV2 extends DateV1 { 

    private Calendar cal; 

    public DateV2(Date date) { 
     super(date); 
     cal = Calendar.getInstance(); 
     cal.setTime(date);  
    } 

    public int getYear() { 
     return cal.get(Calendar.YEAR); 
    } 
} 

тест может выглядеть следующим образом:

@RunWith(value = Parameterized.class) 
public class DateTest { 

    private DateV1 date; 

    public DateTest(DateV1 date) { 
     this.date = date; 
    } 

    @Parameters 
    public static Collection<Object[]> data() { 
     final Date currDate = new Date(); 
     Object[][] data = new Object[][] { { new DateV1(currDate) }, { new DateV2(currDate) } }; 
     return Arrays.asList(data); 
    } 

    @Test 
    public void getYearShouldReturn2013() { 
     Assert.assertEquals(2013, date.getYear()); 
    } 
} 

Однако есть один важный вопрос: Должен ли ваш супер и суб-классы (DateV1 и DateV2) тестироваться точно так же? Класс DateV2 доставляет точно такая же функциональность, как и ее суперкласс DateV1? Если нет абсолютно никакой разницы в поведении между этими классами, почему есть два? Если есть разница между двумя, тогда это должно быть рассмотрено вашим тестом.

+0

: 'DateV1' написан с нуля, используя принцип« лучшего усилия »,' DateV2' использует 'java.util.GregorianCalendar' , Количество методов, их подписи и типы возврата идентичны. Так что да, я бы сказал, тесты должны быть одинаковыми. –

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

  • Нет связанных вопросов^_^