Nếu tôi đã hiểu chính xác bạn, bạn muốn thử nghiệm một lớp học với một hàm tạo giả. Đây không phải là cách tiếp cận tốt để thử nghiệm vì bạn không thử nghiệm mã sản xuất ở dạng thuần túy nhất.
Tuy nhiên, không phải mọi thứ đều tuân theo các quy tắc, phải không? :) Vì vậy, nếu bạn nhấn mạnh, JMockIt sẽ cho phép bạn làm điều này. Bạn có thể giả lập chỉ là hàm tạo và kiểm tra các phương thức khác. Các nhà xây dựng giả mạo được ghi chép đầy đủ tại JMockIt project site.
Đây là một cuộc biểu tình nhanh chóng bạn có thể thử cho mình: Mã
sản xuất:
// 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");
}
}
đang Mock: Mã
// 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");
}
}
Test:
// srce/test/java/pkg/SomeTest.java
import org.junit.Test;
public class SomeTest {
@Test
public void test() {
new SomeMock();
new SomeClass("a", 2);
}
}
Chạy sản xuất mã sẽ in Production constructor called
, nhưng chạy nó dưới kiểm tra sẽ in Mock constructor called
.
Cảm ơn câu trả lời. Tôi sẽ thử nó. – userx
'Nếu tôi đã hiểu bạn một cách chính xác, bạn muốn kiểm tra một lớp với một hàm tạo giả. Đây không phải là một cách tiếp cận tốt để thử nghiệm bởi vì bạn không thử nghiệm mã sản xuất ở dạng thuần túy nhất của nó.' Tôi hoàn toàn không đồng ý. Kiểm tra đơn vị (thử nghiệm hộp trắng - đó là những gì JMockit được sử dụng cho) ở dạng tinh khiết nhất của nó là để kiểm tra các đơn vị riêng lẻ. Nếu bạn đang thử nghiệm một đơn vị cụ thể không phải là một hàm tạo phức tạp, thì cho phép nó thực thi là thử nghiệm hộp đen, điều cực kỳ tồi tệ khi bạn làm thử nghiệm đơn vị. – searchengine27
nhưng làm thế nào để bạn thiết lập các trường của đối tượng khi mô phỏng hàm tạo của bạn (bên trong phương thức $ init())? – supertonsky