Jaka jest różnica między tymi dwoma deklaracjami w mockito?Różnica między Mockito @ Spy i @Mock (answer = Answers.CALLS_REAL_METHODS)
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
Jaka jest różnica między tymi dwoma deklaracjami w mockito?Różnica między Mockito @ Spy i @Mock (answer = Answers.CALLS_REAL_METHODS)
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
Poprzedni styl CALLS_REAL_METHODS tworzy niezainicjowany obiekt; nie są wykonywane żadne konstruktory i nie są ustawione żadne pola. Zasadniczo ta składnia jest niebezpieczna, ponieważ rzeczywiste implementacje będą oddziaływać z niezainicjowanymi polami, które mogą stanowić stan nieprawidłowy lub niemożliwy.
Ten drugi styl @Spy pozwala zadzwonić do wybranego konstruktora, lub Mockito będzie try to call a no-arg constructor if the field is uninitialized. Pola są następnie kopiowane do wygenerowanego Szpiega (który rozszerza typ szpiegowski), umożliwiając znacznie bezpieczniejsze i bardziej realistyczne interakcje.
Requisite przypomnienia: w rzeczywistości nie pozorowanych kolekcje Java poza przykładów zabawek, i nie zapomnij użyć doReturn
składni gdy nadrzędne szpiegów i CALLS_REAL_METHOD kpi albo będziesz wywołać prawdziwą metodę w Zaproszeniu when
.