-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nazewnictwo testów - poziomy testowania. #20
Comments
@Code-Poets/all - można głosować na nazewnictwo punktu 2 ;) Ja osobiście chyba byłbym za "testy komponentowe" |
12groszy ode mnie: Myślę, że warto opatrzyć powyższe nazwy w odpowiedniki angielskojęzyczne, zmniejszajmy wątpliwości do minimum ;) |
Mi bez różnicy, ale wybierzmy jedną i trzymajmy się jej.
Dalej nie do końca jestem przekonany czy to nie jest to samo. Patrząc po opisie wydaje mi się że właśnie te testy typu Btw. jeżeli jednak te testy rozróżniamy, to może warto byłoby je jakoś zkatalogować? Teraz 3 i 4 siedzą w tym samym miejscu. Można to zrobić na przykład w ramach zadania https://www.pivotaltracker.com/story/show/160512292 . Co sądzicie? |
@rwrzesien, w testach E2E korzystamy z produktu tak, jak korzystałby klient. Tzn. używamy tego samego wejścia i wyjścia (w przypadku Concenta, są to endpointy @PaweuB, ok |
Do dodania nic, ale co do pkt2 ograniczył bym się do jednej nazwy. "testy komponentowe" całkiem oryginalnie brzmią, ale właśnie to może być dla kogoś problemem. "jednostkowe+" też pasują. |
@Code-Poets/all Otóż po dłuższych rozważaniach doszedłem do wniosku, że w Concencie mamy 5 rodzajów testów na 4/5 poziomach testowania:
Jeśli chodzi o "poziom", to różnica między komponentowymi a integracyjnymi Django jest niewielka, ale logicznie są to różne testy - komponentowe testują jakiś wydzielony komponent (np. Może wydaje się to trochę skoplikowane, ale to najlepszy podział, jaki byłem w stanie wymyśleć. |
Sprawa chyba jasna - testują najmniejszą "jednostkę" kodu: funkcję, metodę, klasę. Kolaboratorów naszej jednostki często mockujemy / patchujemy. Np. testy funkcji walidujących.
Nie wiem jak je dobrze nazwać. Być może wszystkie nazwy są dobre, bo dotyczą trochę różnych przypadków, dla których cechą wspólną jest to, że są ponad zwykłymi testami jednostkowymi, ale nie są to jeszcze typowe testy integracyjne. Nadal używa się w nich mocków i patchy, ale często usługi są faktycznie stawiane (nasłuchują na otwartych portach), zapisują coś-odczytują z bazy danych, strzelają prawdziwymi zapytaniami http, itd. Jako przykład podałbym testy MiddleMana lub SigningService-u.
lub Djangowe testy dla handlerów:
Testy integracyjne (Integration Tests)
Testują współdziałanie/przepływ informacji/dopasowanie interfejsów dla dwóch lub więcej komponentów. Nie używamy w nich już mocków i patchy - uruchamiamy prawdziwe usługi, itp. Niekiedy korzystamy z tzw. "Fake-ów" czyli klientów/klas, itp. z ograniczoną przyciętą funkcjonalnością, za pomocą których "podłączamy" się do testowanych komponentów i inicjujemy przepływ. W testach integracyjnych możemy zaglądać w "bebechy" systemu, tj. wnioskować o tym czy testy przeszły czy nie na podstawie danych normalnie nie dostępnych z zewnątrz.
Istniejących przykładów jest raczej niewiele, np test z
signing_service_integration_test_middleman
.Testy E2E (End-to-End) (End-to-End Tests or E2E Tests)
Testy przeprowadzane niejako z perspeltywy klienta - testują cały system jako "czarną skrzynkę". Używamy zatem tych samych API/endpointów (punktów wejścia-wyjścia) do sytemu, z których korzystałby klient przy normalnym użytkowaniu. Nie mamy dostęþu do "bebechów" systemu - całe wnioskowanie o tym czy funkcjonalność działa jak należy opiera się o dane z "oficjalnego" wyjścia. Oczywiście, oznacza to, że nie używamy w nich mocków, patchy, itd.
Przykładem byłyby nasze cluster testy, np.
api-e2e-additional-verification-test
.The text was updated successfully, but these errors were encountered: