2012-04-20 24 views
5

Tôi có hai lớp thử nghiệm, MyFirstTest và MySecondTest. Chạy từng hoạt động độc lập tốt. Khi tôi chạy cả hai (trong eclipse chọn thư mục kiểm tra có chứa các tập tin này, nhấp chuột phải, chạy như junit), MySecondTest không thành công vì MyClass vẫn bị nhạo báng khi nó chạy thử nghiệm của nó. MyFirstTest yêu cầu MyClass phải được chế nhạo. MySecondTest yêu cầu MyClass không bị giả mạo. Tôi nghĩ tearDownMocks được giả sử là 'hủy bỏ' các lớp.MyClass vẫn giả lập giữa hai bài kiểm tra

public class MyFirstTest { 
    @Before 
    public void setUp() throws Exception { 
     Mockit.setUpMocks(MockMyClass.class); 
    } 
    @After 
    public void tearDown() throws Exception { 
     Mockit.tearDownMocks(MockMyClass.class); 
    } 
    @AfterClass 
    public static void tearDownAfterClass() throws Exception { 
     Mockit.tearDownMocks(MockMyClass.class); 
    } 
    @MockClass(realClass = MyClass.class, stubs = "<clinit>") 
    public static class MockMyClass { 
... 


public class MySecondTest { 
+1

'Tôi cũng thấy rằng việc thêm Mockit.tearDownMocks(); phương thức thiết lập lớp MySecondTest (được chú thích bằng Trước), đặt lại mocks để nó sẽ không sử dụng mô hình từ lớp trước. Bạn không chắc chắn tại sao các lời gọi Mockit.tearDownMocks (MockMyClass.class) từ bên trong các phương thức được chú thích bằng After và AfterClass đang rơi xuống ... ' – user1346730

Trả lời

3

Phương thức Mockit.tearDownMocks() chấp nhận các lớp thực tế chứ không phải là mocks. Vì vậy, đúng mã sẽ là:

Mockit.tearDownMocks(MyClass.class); 
+2

Tính năng này không còn được dùng nữa. Bây giờ bạn phải gọi '.tearDown' trên lớp mô hình. Ngoài ra, trong JUnit điều này nên được thực hiện giữa các bài kiểm tra tự động – keaplogik

1

Cách đúng để thực hiện như sau: Giả lập lớp và gán nó vào một biến. Và sau đó, bằng cách sử dụng biến đó, bạn có thể phá hủy hoặc xóa mô hình để nó không ảnh hưởng đến bất kỳ trường hợp thử nghiệm nào khác.

MockUp<PmRequestData> mockpmreq = new MockUp<PmRequestData>() { 
     @Mock 
     public Map<String, KPIData> getKpiDataMap() { 
      return datamap; 
      } 
     }; 
mockpmreq.tearDown(); 
Các vấn đề liên quan