Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Czy istnieją jakiekolwiek względy wydajności podczas intensywnego korzystania z zapałek argumentów Mockito


Czy istnieją jakiekolwiek względy wydajności podczas intensywnego korzystania z zapałek argumentów Mockito


Podczas intensywnego korzystania z zapałek argumentów Mockito, należy pamiętać o kilku rozważeniach dotyczących wydajności. Podczas gdy Mockito jest ogólnie wydajne, szeroko zakrojone zastosowanie zapałek argumentów może wprowadzić pewne koszty ogólne ze względu na sposób, w jaki przetwarza te dopasowawców.

1. Matcher przetwarzający koszty ogólne **

- Ocena dopasowania argumentów: Gdy używasz zapałek argumentów, takich jak `eq ()`, `` ana () 'lub `` anaString ()', Mockleo musi ocenić te dopasowawcy w czasie wykonywania. Ten proces oceny może wprowadzić niewielkie koszty ogólne w porównaniu z bezpośrednim przekazaniem dokładnych wartości. Jednak ten koszt ogólny jest zazwyczaj nieistotny, chyba że masz do czynienia z bardzo dużą liczbą inwokacji lub złożonych dopasowań.

2. Reguły kombinacji mechera **

- Wszystkie argumenty muszą używać dopasowań: jeśli użyjesz zapałek argumentu dla jednego argumentu, wszystkie argumenty muszą używać dopasowań. Ta zasada może prowadzić do bardziej szczegółowego kodu i potencjalnie bardziej kosztów ogólnych, jeśli używasz dopasowań dla wszystkich argumentów, gdy tylko jeden potrzebuje określonego warunku. Na przykład, jeśli metoda ma trzy parametry i chcesz użyć „dowolnego ()` dla jednego z nich, musisz również użyć dopasowań dla pozostałych dwóch, nawet jeśli możesz użyć dokładnych wartości.

3. Niestandardowe mecze **

- Złożona logika: Podczas gdy Mockleto zapewnia szeroką gamę wbudowanych dopasowań, może być konieczne stworzenie niestandardowych dopasowań dla określonej logiki. Niestandardowe dopasowywania mogą być droższe obliczeniowo, jeśli obejmują złożoną logikę lub operacje. Wynika to z faktu, że wymagają one wdrożenia interfejsu „argumentMatcher” i zdefiniowania metody `matches (), która może wykonywać dowolne czeki.

4. Weryfikacja ogólna **

- Weryfikacja za pomocą dopasowań: Podczas weryfikacji interakcji z próbnymi obiektami za pomocą `verify () ', Mockleto używa również dopasowań, aby sprawdzić, czy przyjęto prawidłowe argumenty. Podobnie jak Stupbing, weryfikacja za pomocą dopasowań może przedstawić pewne koszty ogólne, zwłaszcza jeśli weryfikujesz wiele połączeń ze złożonymi dopasowawcami.

5. Najlepsze praktyki wydajności **

- Mądrze użyj specyfiki: używaj dopasowań z odpowiednim poziomem swoistości. Na przykład „anyint ()” jest mniej specyficzny i szybszy niż `Eq (4)`, ale używając `Eq (4)` `, gdy trzeba sprawdzić określoną wartość, jest bardziej precyzyjne i nie wpływa znacząco na wydajność.
- Unikaj niepotrzebnej złożoności: Unikaj używania niestandardowych dopasowań, chyba że jest to konieczne. Jeśli test wymaga złożonej logiki w celu dopasowania argumentów, rozważ uproszczenie testu lub twórczo korzystanie z istniejących dopasowań.
- Profiluj testy: Jeśli zauważysz problemy z wydajnością w testach, profil je, aby zidentyfikować wąskie gardła. Rzadko zdarza się, że mecherzy Mocchito są główną przyczyną znacznych problemów z wydajnością, ale zawsze dobrze jest weryfikować.

Podsumowując, podczas gdy dopasowawcy argumentów Mockito przedstawiają pewne koszty ogólne, na ogół nie stanowi to znaczącego problemu, chyba że masz do czynienia z bardzo złożonymi lub krytycznymi testami. Korzyści płynące z korzystania z Matchers, takie jak elastyczność i przejrzystość w kodzie testowym, zwykle przewyższają niewielkie koszty wydajności.

Cytaty:
[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-string-directly/56572275
[2] https://www.digitallocean.com/community/tutorials/mockito-argument-matchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockoto
[4] https://www.softwaretestinghelp.com/mockito-matchers/
[5] https://www.toptal.com/java/a-guide-to-everyday-mockoto
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lembdatest.com/automation-testing-advisor/selenum/classes/org.moctito.additionalmatchers
[8] https://stackaverflow.com/questions/73046134/when-should-i -se-argument-matcher-or-passing-argument-directly-hen-mockoito-uni