[英]verify does not execute in Mockito
我得到錯誤:
Wanted but not invoked:
iReimbursementDAO.update(
Reimbursement{id=2, status=Pending, author=User{id=1, username='genericEmployee1', password='genericPassword', f_name null', l_name null', email null', role=Employee}, resolver=null, amount=150.0, description null,creation null, resolution null, receipt null}
);
-> at Test.testProcessPassesWhenUserIsFinanceManagerAndReimbursementExistsAndUpdateSuccessful(ReimbursementServiceTest.java:69)
實際上,與此模擬的交互為零。 我按照上一篇文章的回答中的步驟操作,並讓我的測試成功用於不同的 class。 現在我在第二個 class 中嘗試了相同的步驟,如下所示,測試在一個地方失敗。
public class ReimbursementServiceTest {
private static IReimursementService reimbursementService;
private static IReimbursementDAO reimbursementDAO;
private Reimbursement REIMBURSEMENT_TO_PROCESS;
private Reimbursement GENERIC_REIMBURSEMENT_1;
private Optional<Reimbursement>
GENERIC_REIMBURSEMENT_2;
private List<Reimbursement> GENERIC_ALL_PENDING_REIMBURSEMENTS;
private User GENERIC_EMPLOYEE_1;
private User GENERIC_FINANCE_MANAGER_1;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
reimbursementDAO = mock(IReimbursementDAO.class);
reimbursementService = new ReimbursementService(reimbursementDAO);
}
@Before
public void setUp() throws Exception {
GENERIC_EMPLOYEE_1 = new User(1, "genericEmployee1", "genericPassword", Role.EMPLOYEE);
GENERIC_FINANCE_MANAGER_1 = new User(1, "genericManager1", "genericPassword", Role.FINANCE_MANAGER);
REIMBURSEMENT_TO_PROCESS = new Reimbursement(2, Status.PENDING, GENERIC_EMPLOYEE_1, null, 150.00);
GENERIC_REIMBURSEMENT_1 = new Reimbursement(1, Status.PENDING, GENERIC_EMPLOYEE_1, null, 100.00);
GENERIC_REIMBURSEMENT_2 = Optional.ofNullable(new Reimbursement(2, Status.APPROVED, GENERIC_EMPLOYEE_1, GENERIC_FINANCE_MANAGER_1, 150.00));
GENERIC_ALL_PENDING_REIMBURSEMENTS = new ArrayList<Reimbursement>();
GENERIC_ALL_PENDING_REIMBURSEMENTS.add(GENERIC_REIMBURSEMENT_1);
}
@Test
public void testProcessPassesWhenUserIsFinanceManagerAndReimbursementExistsAndUpdateSuccessful()
throws Exception{
when(reimbursementDAO.getById(anyInt())).thenReturn(Optional.of(GENERIC_REIMBURSEMENT_1));
when(reimbursementDAO.update(any())).thenReturn(GENERIC_REIMBURSEMENT_2);
assertEquals(GENERIC_REIMBURSEMENT_2,
reimbursementService.process(REIMBURSEMENT_TO_PROCESS, Status.APPROVED,
GENERIC_FINANCE_MANAGER_1));
verify(reimbursementDAO).getById(REIMBURSEMENT_TO_PROCESS.getId());
verify(reimbursementDAO).update(REIMBURSEMENT_TO_PROCESS);
}
@Test
public void testGetReimbursementByStatusPassesWhenReimbursementsAreSuccessfullyReturned() {
when(reimbursementDAO.getByStatus(any())).thenReturn(GENERIC_ALL_PENDING_REIMBURSEMENTS);
assertEquals(GENERIC_ALL_PENDING_REIMBURSEMENTS,
reimbursementService.getReimbursementsByStatus(Status.PENDING));
verify(reimbursementDAO).getByStatus(Status.PENDING);
}
}
public class ReimbursementService implements
IReimursementService {
private final IReimbursementDAO reimbDao;
public ReimbursementService() {
this(new ReimbursementDAO());
}
public ReimbursementService(IReimbursementDAO userDAO2) {
this.reimbDao = userDAO2;
}
@Override
public Optional<Reimbursement> process(Reimbursement
unprocessedReimbursement,
Status finalStatus, User resolver) throws Exception{
if (!resolver.getRole().equals(Role.FINANCE_MANAGER)) {
throw new RegistrationUnsuccessfulException(" be
Finance Manager ");}
if(unprocessedReimbursement.getId()==0)
{ throw new Exception(" reimbursement not found"); }
if(unprocessedReimbursement.getStatus().equals(Status.PENDING))
{
Optional<Reimbursement> reimb=
this.reimbDao.update(unprocessedReimbursement);
if(reimb.isPresent())
{ return reimb; }
else { throw new Exception("unsuccessful update");}
}
return Optional.ofNullable(null);
}
@Override
public List<Reimbursement> getReimbursementsByStatus(Status
status) {
return reimbDao.getByStatus(status);
}
@Override
public Optional<Reimbursement> getById(int id) {
return reimbDao.getById(id);
}
}
您被告知錯誤是什么:想要但未調用 - 您想要調用dao.update
,但您沒有調用它。 “實際上,與這個模擬的互動為零。” 確切地說,那么您為什么要驗證是否調用了更新?
從測試中刪除它verify(reimbursementDAO).update(REIMBURSEMENT_TO_PROCESS);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.