So habe ich für das folgende Stück Code, um das Layout Unit-Tests gestartet:Einheit Test Architektur Frage
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
}
}
mit mehreren Implementierungen und die Erwartung, mehr zu kommen.
Mein erster Gedanke war mir Zeit Umschreiben Unit-Tests mit so etwas zu sparen:
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
}
}
die ich dann einfach die Implementierung spezifische zusätzliche Methoden wie so zu testen, Unterklasse könnte:
public class MyImplementation1Tester extends MyInterfaceTester {
public MyInterface getTestedImplementation() {
return new MyImplementation1();
}
@Test
public void testSubRoutineP() {
// use m_object to run tests
}
}
und ebenfalls zur Ergänzung 2 weiter.
Also meine Frage ist wirklich: Gibt es einen Grund, dies nicht zu tun? JUnit scheint es gut zu mögen, und es erfüllt meine Bedürfnisse, aber ich habe in keinem der Unit-Testbücher und -beispiele, die ich gelesen habe, so etwas gesehen.
Gibt es einige Best Practice, die ich unwissentlich verletze? Richte ich mich für den Herzschmerz auf der Straße ein? Gibt es da einfach einen wesentlich besseren Weg, den ich nicht bedacht habe?
Danke für jede Hilfe.
Ich wusste nichts von dieser Funktion, vielen Dank für die Freigabe. Weitere Informationen und ein funktionierendes Beispiel finden Sie hier: http://www.devx.com/Java/Article/31983/0/page/3 für alle anderen Interessierten. –