2013-08-30 38 views
10

Tôi là đơn vị kiểm tra một lớp có một hàm tạo phức tạp (có nhiều tham số). Constructor có ba đối số như:Nhà xây dựng giả lập JMockit

public BehavioralDischargeCarePlan_Bus(Webform webForm,String dataEntryModel, String  obsBatId) { 

    super(webForm, dataEntryModel, obsBatId); 
..... 

Hàm tạo sau đó gọi hàm tạo siêu phức tạp hơn. Sử dụng JMockit, làm thế nào tôi có thể tạo một thể hiện của lớp và kiểm tra một phương thức mà không thực sự gọi các hàm tạo? Tôi mới làm quen với JMockit, mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn!

Trả lời

12

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.

+0

Cảm ơn câu trả lời. Tôi sẽ thử nó. – userx

+0

'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

+0

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

Các vấn đề liên quan