Używam Mockito 1.9.0. W jaki sposób sprawdzić, czy metoda została wywołana dokładnie jeden raz i że jedno z pól przekazanych do niej zawiera pewną wartość? W moim teście JUnit, mamKorzystając z Mockito, jak sprawdzić, czy metoda została wywołana z określonym argumentem?
@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();
}
z „praca” metoda wywołuje metodę „m_orderSvc” (jeden z argumentów przekazanych do obiektu). "m_orderSvc" z kolei zawiera pole członka, "m_contractsDao". Chcę sprawdzić, czy "m_contractsDao.save" zostało wywołane dokładnie raz i że przekazywany do niego argument zawiera pewną wartość.
Może to być trochę mylące. Daj mi znać, jak mogę wyjaśnić moje pytanie i cieszę się, że mogę to zrobić.
FYI, można pozostawić wyłączony 'czasy (1)', jak to jest zawsze domniemanych chyba dodać kwantyfikator określający coś innego niż dokładnie jednym czasie. I zamiast 'any (String.class)' istnieje nieco bardziej wygodny 'anyString()'. –
Warto również zauważyć, że argument, który został przekazany do metody PO "weryfikuj" jest porównywany z użyciem 'equals' do argumentu, który został przekazany podczas rzeczywistego testu. Tak więc, niezależnie od metody (metoda 'save' w przykładzie mamboking), pomyśl o _type_ każdego parametru io tym, czy faktycznie potrzebujesz porównania z' equals'. Jeśli chcesz przetestować argument za pomocą czegoś innego niż 'równy ', potrzebujesz' ArgumentMatcher' jakiegoś rodzaju (który może być 'ArgumentCaptor' jak w odpowiedzi Kevina Welkera). –
Jak określić dokładnie raz, nie dwa lub więcej? Komentarz @ KevinWelker mówi, że jest ukryty, ale nie jest pewny, czy oznacza dokładnie jeden raz, czy chociaż raz. – aliteralmind