Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jakie są główne różnice między Whiteboxem Powermock i Whitebox Mockleto


Jakie są główne różnice między Whiteboxem Powermock i Whitebox Mockleto


Whitebox i WhiteBox Mocklebo to klasa użyteczności użytej do uzyskiwania dostępu do i manipulowania wewnętrznymi stanami klas, ale mają wyraźne różnice w ich pochodzeniu, funkcjonalnościach i kontekstach użytkowania.

pochodzenie i dostępność

- Whitebox Mockito: była to klasa wewnętrzna w Mockito, która pozwoliła użytkownikom ustawiać wewnętrzne stany obiektów. Został jednak usunięty z Mockito 2.x z powodu obaw związanych z promowaniem złych praktyk testowych i ponieważ nie był przeznaczony do użytku publicznego [11]. Użytkownicy, którzy polegali na tym, zostali zachęceni do przejścia na alternatywy, takie jak Whitebox Powermock lub wdrożyć własne narzędzia refleksyjne [3].

- Whitebox Powermock: Jest to część biblioteki PowerMock, która rozszerza możliwości Mockito, umożliwiając między innymi kpiny metod prywatnych, statycznych i końcowych [5]. Whitebox PowerMock zapewnia uproszczone narzędzie do refleksji przeznaczonych do testów, umożliwiając dostęp do prywatnych członków i wywołanie metod prywatnych [2] [6].

funkcjonalność

- Whitebox Mockito (historyczny): Przed jego usunięciem Whitebox Mockleto pozwolił użytkownikom ustawić wewnętrzne stany obiektów przy użyciu metod takich jak „setInteralState”. Było to przydatne do wstrzykiwania próbek na zajęcia bez publicznych setek.

- Whitebox Powermock: oferuje szerszy zestaw funkcji, w tym:
- Dostęp do prywatnych członków: Metody takie jak „getInternalState` Zezwalaj na pobieranie prywatnych wartości pola.
- Wzywając metody prywatne: Metoda „invokemethod` może wywoływać prywatne metody, w tym statyczne [4] [10].
- Ustalając prywatne pola: Chociaż nie udokumentowane, Whitebox Powermock można użyć do ustawiania pól prywatnych poprzez refleksję, choć nie jest to jego główny cel.

Kontekst użytkowania

- Whitebox Mockito: Ponieważ nie jest już dostępny w Mockito 2.x, użytkownikom zaleca się użycie alternatyw, takich jak Whitebox Powermock lub „ReflectionTestils” Spring `` ReflectionTestils` [1] [3].

- Whitebox Powermock: zwykle używany w scenariuszach, w których konieczny jest bezpośredni dostęp do prywatnych członków lub metod, często w starszym kodzie lub podczas testowania złożonej logiki, której nie można łatwo refaktować. Jednak ogólnie zaleca się unikanie korzystania z takich narzędzi, chyba że jest to absolutnie konieczne, ponieważ mogą one one oni oni oni one enkapsulacja i prowadzić do kruche testy [10].

Podsumowując, podczas gdy oba narzędzia Whitebox służą podobnym celom, wersja PowerMock jest bardziej wszechstronna i szeroko dostępna, podczas gdy wersja Mockito została usunięta z powodu obaw związanych z praktykami testowymi. Whitebox Powermock to potężne narzędzie do dostępu i manipulowania stanami klas wewnętrznych, ale powinno być używane rozsądnie.

Cytaty:
[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-whitebox-in-gocchito-2-2-to-set-fields
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3] https://proandroiddev.com/mockito-2-x-x-ver-powermock-ligration-tips-and-tricks-ten-118C52Abd1d8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-testing-advisor/selenum/classes/org.powermock.reflect.whitebox
[10] https://github.com/powermock/powermock/wiki/Bypass-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/