Так я начал Удельный макет тестов на следующий фрагмент кода:Unit Tests архитектура Question
public interface MyInterface {
void MyInterfaceMethod1();
void MyInterfaceMethod2();
}
public class MyImplementation1 implements MyInterface {
void MyInterfaceMethod1() {
// do something
}
void MyInterfaceMethod2() {
// do something else
}
void SubRoutineP() {
// other functionality specific to this implementation
}
}
public class MyImplementation2 implements MyInterface {
void MyInterfaceMethod1() {
// do a 3rd thing
}
void MyInterfaceMethod2() {
// do something completely different
}
void SubRoutineQ() {
// other functionality specific to this implementation
}
}
с несколькими реализациями и ожиданием большего.
Моя первая мысль была, чтобы спасти себя время испытаний переписывание единицы что-то вроде этого:
public abstract class MyInterfaceTester {
protected MyInterface m_object;
@Setup
public void setUp() {
m_object = getTestedImplementation();
}
public abstract MyInterface getTestedImplementation();
@Test
public void testMyInterfaceMethod1() {
// use m_object to run tests
}
@Test
public void testMyInterfaceMethod2() {
// use m_object to run tests
}
}
, который я мог бы подкласс легко проверить реализацию конкретных дополнительных методов, как так:
public class MyImplementation1Tester extends MyInterfaceTester {
public MyInterface getTestedImplementation() {
return new MyImplementation1();
}
@Test
public void testSubRoutineP() {
// use m_object to run tests
}
}
и аналогичным образом для имплантации 2 и далее.
Так что мой вопрос на самом деле: есть ли причина не делать этого? JUnit, похоже, очень нравится, и он удовлетворяет мои потребности, но на самом деле я не видел ничего подобного ни в одной из книг тестирования модулей и примеров, которые я читал.
Есть ли какая-то лучшая практика, которую я невольно нарушаю? Устраиваю ли я себя в сердце? Является ли просто намного лучший способ, который я не рассматривал?
Спасибо за любую помощь.
Не знаю об этой функции, спасибо за обмен. Дополнительная информация и рабочий пример здесь: http://www.devx.com/Java/Article/31983/0/page/3 для всех, кто интересуется. –