Istnieją dwa aspekty w tej sprawie.
- Testy jednostkowe. Te mają być bardzo szybkie (wykonać cały zestaw testów w ciągu kilku sekund). Testują bardzo małe fragmenty kodu - tj. Jedną metodę. Aby osiągnąć ten rodzaj ziarnistości, musisz wyśmiać całe środowisko używając np. Mockito. Nie jesteś zainteresowany:
- wywoływanie EntityManager i wprowadzenie do bazy danych podmiotów,
- transakcji testowych
- dokonywania asynchronicznych wywołań,
- uderzanie JMS Endpoint itp
Kpisz sobie z całego środowiska i po prostu testujesz każdą metodę osobno. Jednostkowe testy są drobnoziarniste i niesamowicie szybkie. Dzieje się tak dlatego, że możesz je wykonywać za każdym razem, gdy wprowadzasz ważne zmiany w kodzie. Gdyby były bardziej złożone i czasochłonne, deweloper nie uderzyłby tak często, jak powinien, w przycisk "test".
- Testy integracyjne. Są wolniejsze, ponieważ chcesz przetestować integrację między modułami. Chcesz sprawdzić, czy oni „rozmawiać” ze sobą w odpowiedni sposób, to znaczy:
- są transakcje rozmnażane w sposób, można się spodziewać,
- co się dzieje, jeśli wywołać metodę biznesu bez transakcji w ogóle,
- czy zmiany wysyłane z klienta WebServices naprawdę trafiają w metodę punktu końcowego i dodaje dane do bazy danych?
- co zrobić, jeśli mój punkt końcowy JMS rzuci wyjątek ApplicationException - czy poprawnie wycofa wszystkie zmiany?
Jak widać, testy integracyjne są gruboziarnistych i jak są one wykonywane w pojemniku (lub zasadniczo: w środowisku produkcyjnym-like) są znacznie wolniejsze. Testy te zazwyczaj nie są wykonywane przez programistę po każdej zmianie kodu.
Oczywiście można uruchomić kontener EJB w trybie wbudowanym, tak samo jak można wykonać WZP w Java SE. Chodzi o to, że sztuczne środowisko daje ci podstawowe usługi, ale skończysz z jego podkręcaniem i nadal kończysz z mniejszą elastycznością niż w prawdziwym pojemniku.
Arquillian umożliwia tworzenie środowiska produkcyjnego na wybranym pojemniku i po prostu wykonywanie testów w tym środowisku (przy użyciu źródeł danych, miejsc docelowych JMS i wielu innych konfiguracji, które można oczekiwać w środowisku produkcyjnym.)
Mam nadzieję, że to pomaga.
Dziękuję, perf ect odpowiedź. Część JMS jest szczególnie interesująca w moim przypadku. –
Cieszę się, że mogę pomóc :-) –
Dobra wiadomość. Jestem ciekawy, co to jest "Chodzi o to, że sztuczne środowisko daje ci podstawowe usługi, ale skończysz z jego podkręcaniem i nadal kończysz z mniejszą elastycznością niż w rzeczywistym kontenerze". Ideą API EJBContainer jest to, że używasz prawdziwego kontenera EJB. Nie powinno być żadnej różnicy w przestrzeganiu lub zachowaniu. –