Mam klasę Foo
, która jest klasą SUT i klasą Bar
, która jest jej współpracownikiem. Foo
dzwoni run(List<Object> values)
na Bar
z "expectedList
" jako argumentem. Następnie Foo
doda kilka dodatkowych elementów do tego List
, tak aby jego stan był inny niż był w czasie wywoływania run()
. Oto mój przypadek testowy.Czy narzędzie Mockito może weryfikować parametry na podstawie ich wartości w czasie wywołania metody?
@Test
public void testFoo() {
Bar collaborator = spy(new Bar());
Foo sut = new Foo(collaborator);
verify(collaborator).run(expectedList);
}
Zauważ, że współpracownik jest rzeczywiście obiekt szpiegowski zamiast makiety. Ten przypadek testowy zakończy się niepowodzeniem, ponieważ pomimo tego, że run()
został wywołany z argumentem równym expectedList
, został zmodyfikowany, a jego aktualna wartość nie jest już równa expectedList
. Jednak to jest sposób, w jaki powinien działać, więc zastanawiam się, czy istnieje sposób, aby Mockito zapisał migawkę parametrów podczas wywoływania metody i zweryfikował je na podstawie tych wartości, a nie ostatnich wartości.
Tak, David ma rację. Ze względu na sposób, w jaki tworzone jest API Mockito, nie jest możliwa weryfikacja wielu połączeń z tym samym odwołaniem do argumentu. EasyMock może to zrobić, ponieważ ma fazę oczekiwania przed uruchomieniem kodu produkcyjnego. W każdym razie zamiast 'Odpowiedź' używam' ArgurmentCaptor' i napisać jedną lub więcej asercji na ostateczny stan tej listy, tj. Z FEST-Assert 'assertThat (captor.getValue()). Zawiera (" A "," B ") .contains (" T "," U ");' – Brice
@Brice - jak by to działało inaczej niż podejście Michaela Wilesa? –
Nie jest. To tylko inny sposób osiągnięcia celu testu. Ponieważ przez większość czasu nie trzeba sprawdzać pośrednich argumentów, ale tylko niektóre interakcje miały miejsce i wynik końcowy.Chociaż muszę powiedzieć, czy Tom miał określone wymagania, to zgodził się, że to mu nie pomoże, ale w tym przypadku uniknęłbym zmiennego obiektu w moim kodzie produkcyjnym. Wydaje się, że komunikowanie się między dwoma współpracownikami i wiadomościami powinno być zawsze niezmienne. – Brice