Tôi đang sử dụng Mockito 1.9.0. Làm thế nào tôi sẽ xác minh rằng một phương pháp đã được gọi chính xác một lần, và rằng một trong những lĩnh vực thông qua để nó có chứa một giá trị nhất định? Trong thử nghiệm JUnit của tôi, tôi cóSử dụng Mockito, làm cách nào để xác minh một phương thức được gọi với một đối số nhất định?
@Before
public void setupMainProg() {
// Initialize m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc
...
m_prog = new ProcessOrdersWorker(m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc);
} // setupMainProg
@Test
public void testItAll() throws GeneralSecurityException, IOException {
m_prog.work();
}
Phương thức "công việc" gọi phương thức "m_orderSvc" (một trong các đối số được truyền vào đối tượng). "m_orderSvc," lần lượt chứa một trường thành viên, "m_contractsDao". Tôi muốn xác minh rằng "m_contractsDao.save" đã được gọi chính xác một lần và đối số được truyền cho nó chứa một giá trị nhất định.
Điều này có thể hơi khó hiểu. Hãy cho tôi biết làm thế nào tôi có thể làm rõ câu hỏi của tôi và tôi rất vui khi làm điều đó.
FYI, bạn có thể rời khỏi ', lần (1)', vì nó luôn luôn ám chỉ trừ khi bạn thêm một lượng hóa quy định cụ thể một cái gì đó khác hơn là chính xác một lần. Và thay vì 'any (String.class)', có một 'anyString()' thuận tiện hơn một chút. –
Cũng cần lưu ý rằng đối số được chuyển cho phương thức SAU khi 'xác minh' được so sánh bằng cách sử dụng' bằng' cho đối số đã được chuyển qua trong thử nghiệm thực tế. Vì vậy, bất kể phương thức là gì (phương thức 'save' trong ví dụ của mamboking), hãy suy nghĩ về _type_ của mỗi tham số, và liệu so sánh với' bằng' là cái bạn thực sự muốn. Nếu bạn muốn đối số được kiểm tra với một cái gì đó khác với 'bằng', bạn sẽ cần một' ArgumentMatcher' của một kiểu nào đó (có thể là một 'ArgumentCaptor' như trong câu trả lời của Kevin Welker). –
Làm thế nào để bạn xác định chính xác một lần, không phải là hai hoặc nhiều hơn? @ Bình luận của KevinWelker nói rằng nó ngầm, nhưng không chắc chắn nếu nó có nghĩa là chính xác một lần, hoặc ít nhất một lần. – aliteralmind