2011-07-08 21 views
6

Tôi không biết tại sao, nhưng tôi đã luôn viết các bài kiểm tra JMock của tôi như thế này:JMock assertIsSatisfied in TearDown?

@Test 
public void testMyThing() throws Exception { 
    mockery.checking(new Expectations() {{ 
     oneOf(mockObj).foo(); 
    }}); 
    testObj.bar(); // calls mockObj.foo() 
    mockery.assertIsSatisfied(); 
} 

Nhưng khi có rất nhiều thử nghiệm, nó là tốt hơn để di chuyển assertIsSatisfied để những giọt nước mắt xuống?

@After 
public void tearDown() throws Exception { 
    mockery.assertIsSatisfied(); 
} 

Trả lời

5

Cách được khuyến nghị để làm điều này là sử dụng nhân vật JMock. Chú thích lớp học với

@RunWith(JMock.class) 
public class TestClass { 

Điều này sẽ gọi xác nhận ở đúng nơi trong vòng đời kiểm tra. Teardown không phải là nơi thích hợp vì thất bại có thể không được báo cáo một cách chính xác và có thể làm hỏng các dọn dẹp khác.

Chúng tôi cũng có quy tắc nhạo báng trong kho lưu trữ hoạt động với cơ sở hạ tầng @Rule mới.

0

Có, tôi có xu hướng làm điều đó trong teardown. Nó giữ trọng tâm của các phương pháp thử nghiệm cá nhân trên những gì họ đang thực sự thử nghiệm, bằng cách loại bỏ các boilerplate ra vào @After - nó quan trọng đối với tôi rằng các bài kiểm tra là biểu cảm và dễ đọc nhất có thể.

Thực tế, đôi khi tôi lấy nó nhiều hơn thế, và sử dụng lớp cơ sở JMockSupport xử lý Mockery cho tôi (cũng như cung cấp triển khai thuận tiện mock(...)). Đây chỉ là một tiện lợi, tất nhiên, và không có nghĩa là một yêu cầu như trong JUnit 3.

+0

Vui lòng xem xét sử dụng trình chạy thử hoặc quy tắc mới. Nếu bạn sử dụng @After, ngoại lệ sẽ không được ném vào đúng thời điểm trong vòng đời kiểm tra. –

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