W dokumentacji Mockito i javadocs jest napisane
Zaleca się używanie ArgumentCaptor z weryfikacją, ale nie z stubbingiem.
ale nie rozumiem, w jaki sposób ArgumentCaptor może być używany do stubbingu. Czy ktoś może wyjaśnić powyższe stwierdzenie i pokazać, w jaki sposób ArgumentCaptor może być użyty do stubbingu lub podać link, który pokazuje, jak można to zrobić?
java
unit-testing
junit
mockito
Nie mogę powiedzieć
źródło
źródło
Odpowiedzi:
Zakładając następującą metodę testowania:
Dokumentacja Mockito mówi, że należy nie używać captor w ten sposób:
Ponieważ możesz po prostu użyć matchera podczas stubbowania:
Ale weryfikacja to inna historia. Jeśli twój test musi upewnić się, że ta metoda została wywołana z określonym argumentem, użyj
ArgumentCaptor
i tak jest w przypadku, dla którego została zaprojektowana:źródło
false
nie jesttrue
.Linia
zrobiłby to samo, co
Tak więc użycie argumentCaptor.capture (), gdy stubbing nie ma wartości dodanej. Użycie Matchers.any () lepiej pokazuje, co naprawdę się dzieje, a tym samym poprawia czytelność. Dzięki argumentCaptor.capture () nie możesz odczytać, które argumenty są naprawdę dopasowane. Zamiast używać any (), możesz użyć bardziej szczegółowych dopasowań, gdy masz więcej informacji (klasa oczekiwanego argumentu), aby ulepszyć swój test.
I jeszcze jeden problem: jeśli używasz argumentCaptor.capture () podczas korkowania, nie jest jasne, ile wartości należy się spodziewać po weryfikacji. Chcemy uchwycić wartość podczas weryfikacji, a nie podczas tworzenia kodu pośredniczącego, ponieważ w tym momencie nie ma jeszcze wartości do przechwycenia. Co więc przechwytuje metoda przechwytywania argumentów podczas krojenia? czy niczego nie rejestruje? Nie mam odpowiedzi na to pytanie. Uważam to za niezdefiniowane zachowanie i nie chcę używać niezdefiniowanego zachowania.
źródło
Hipotetycznie, jeśli wyszukiwanie doprowadziło Cię do tego pytania, prawdopodobnie chcesz tego:
Czemu? Ponieważ tak jak ja cenisz czas i nie zamierzasz wdrażać
.equals
tylko ze względu na scenariusz pojedynczego testu.A 99% testów rozpada się z wartością null zwróconą z Mocka i w rozsądnym projekcie unikniesz zwrotu
null
za wszelką cenę, użyjOptional
lub przenieś się do Kotlina. Oznacza to, żeverify
nie musi być używany tak często, a ArgumentCaptors są po prostu zbyt nużące do pisania.źródło