Così ho iniziato a unit test il layout per il seguente frammento di codice:Unità Test Architettura Domanda
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
}
}
con diverse implementazioni e l'aspettativa di più a venire.
Il mio primo pensiero è stato quello di salvare me stesso test di unità ri-scrittura di tempo con qualcosa di simile:
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
}
}
che ho potuto poi sottoclasse facilmente testare l'implementazione specifici metodi aggiuntivi in questo modo:
public class MyImplementation1Tester extends MyInterfaceTester {
public MyInterface getTestedImplementation() {
return new MyImplementation1();
}
@Test
public void testSubRoutineP() {
// use m_object to run tests
}
}
e similmente per l'impianto 2 in poi.
Quindi la mia domanda è davvero: c'è qualche ragione per non farlo? A JUnit sembra piacere e va bene per i miei bisogni, ma non ho mai visto nulla di simile in nessuna delle unità che testano libri ed esempi che ho letto.
C'è qualche pratica migliore che sto inconsapevolmente violando? Mi sto preparando per il dolore per la strada? C'è semplicemente un modo migliore là fuori che non ho considerato?
Grazie per qualsiasi aiuto.
Non conoscevo questa funzione, grazie per la condivisione. Maggiori informazioni e un esempio operativo qui: http://www.devx.com/Java/Article/31983/0/page/3 per chiunque sia interessato. –