所以我已經開始佈局單元測試下面的代碼位:單元測試架構問題
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其他感興趣的人。 – 2010-06-09 02:01:10