如果我正確地理解了你,你想用模擬的構造函數測試一個類。這不是測試的好方法,因爲您不是以最純粹的形式測試生產代碼。
但是,並非所有事情都按照規則進行,是嗎? :)所以,如果你堅持,JMockIt會讓你這樣做。你可以模擬出構造函數並測試其他方法。嘲笑建設者在JMockIt project site有詳細記錄。
這裏是一個快速演示中,您可以嘗試自己:
生產代碼:
// src/main/java/pkg/SomeClass.java
public class SomeClass {
public static void main(String[] args) {
new SomeClass("a", 2);
}
public SomeClass(String a, Integer b) {
System.out.println("Production constructor called");
}
}
模擬代碼:
// src/test/java/pkg/SomeMock.java
import mockit.Mock;
import mockit.MockUp;
public class SomeMock extends MockUp<SomeClass> {
@Mock
public void $init(String a, Integer b) {
System.out.println("Mock constructor called");
}
}
測試代碼:
// srce/test/java/pkg/SomeTest.java
import org.junit.Test;
public class SomeTest {
@Test
public void test() {
new SomeMock();
new SomeClass("a", 2);
}
}
運行生產 代碼將打印Production constructor called
,但在測試中運行它將打印Mock constructor called
。
感謝您的回答。我會試試看。 – userx
'如果我已經正確理解了你,你想用模擬的構造函數測試一個類。這不是測試的好方法,因爲您不是以最純粹的形式測試生產代碼。「我完全不同意。以最純粹的形式進行單元測試(白盒測試 - 這就是JMockit的用處)是測試單個單元。如果您正在測試一個不是複雜構造函數的特定單元,那麼允許它執行的是黑盒測試,當您嘗試進行單元測試時,這是非常糟糕的。 – searchengine27
但是如何在模擬你的構造函數時(在$ init()方法內)設置對象的字段? – supertonsky