2012-12-20 32 views
6

Tôi đã sau kịch bảnCó bất cứ điều gì tương tự như Junit Method Setup trong Mockito

interface DAO 
{ 
     String a(); 
     String b(); 
     String c(); 

} 

tôi tạo ra một mô hình của giao diện DAO này và tôi nuôi nó đến một cái gì đó gọi là DAOProcess. Bên trong DAOProcess, tôi có nhiều phương thức gọi phương thức DAO a, b và c.

Bây giờ mỗi lần tôi cần phải kiểm tra đơn vị phương pháp trong DAOProcess, tôi sẽ kết thúc bằng văn bản when(mockDAO.a()).thenReturn("test").

Có cách nào để tôi có thể di chuyển các số when(mockDAO.a()).thenReturn("test") này chung cho tất cả các trường hợp kiểm tra không?

Trả lời

9

Nếu trường hợp thử nghiệm của bạn được tất cả trong một lớp học mà bạn có thể làm cho việc sử dụng một phương pháp chú thích với @Before, ví dụ:

... 
private DAO mockDAO; 

@Before 
public void setUp() { 
    mockDAO = mock(DAO.class); 
    when(mockDAO.a()).thenReturn("test"); 
    ...etc... 
}  
... 

Hoặc, nếu bạn cần hành vi trên nhiều lớp kiểm tra, bạn có thể viết một lớp tiện ích để thiết lập hành vi trên một cá thể Mock, ví dụ:

public class MockDAOPrototype { 
    public DAO getMockWithDefaultBehaviour() { 
     final DAO mockDAO = mock(DAO.class); 
     when(mockDAO.a()).thenReturn("test"); 
     ...etc... 

     return mockDAO; 
    } 
} 

Và sau đó gọi MockDAOPrototype.getMockWithDefaultBehaviour() trong phương thức setUp của bạn.

2

Bạn có thể tạo lớp AbstractTestCase là abstract và được mở rộng bởi tất cả các trường hợp thử nghiệm mà bạn cần mô hình này. Trong trường hợp thử nghiệm trừu tượng đó, bạn sẽ có các câu lệnh sau.

@Ignore // just in case your runner thinks this is a JUnit test. 
public abstract class AbstractTestCase 
{ 
     @Mock 
     private DAO mockDAO; 

     @Before 
     private void setupMocks() 
     { 
      when(mockDAO.a()).thenReturn("test") 
      .... 
     } 
} 

Trong lớp test cụ thể của bạn, bạn sẽ

public class MyConcreteTestCase extends AbstractTestCase 
{ 
     @InjectMocks 
     @Autowired 
     private DAOProcess daoProcess; 

     .... 
} 
+0

Tôi sẽ không sử dụng chú thích Tự động ở đây, vì nó có thể gây nhầm lẫn với nội dung mùa xuân. Ngay cả khi DAOProcess được xây dựng trong bối cảnh mùa xuân, tôi không chắc chắn ti sẽ là một ý tưởng khôn ngoan để thay thế các tham chiếu của cộng tác viên bằng mocks, trong khi các dầm này vẫn được quản lý bởi mùa xuân! – Brice

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