Ogólnie
Kiedy masz wystarczająco dużo automatycznych testów, aby mieć pewność co do ciągłości procesu integracji?
Odpowiedź prawdopodobnie stanie się jasna, jeśli pomyślisz o tym, co chcesz być pewny. Ostatecznie odwzorowuje 1-1; każdy test daje pewność co do jednej rzeczy, którą testuje:
- Testy jednostkowe dają pewność, że klasa (lub moduł) robi to, co jest testowana.
- Testy integracyjne dają pewność, że kilka jednostek współpracuje ze sobą w sposób, w jaki jest testowany.
- Kompleksowe testowanie daje pewność, że cała aplikacja wykonuje określone czynności w sposób opisany w teście.
Ze sposobu, w jaki sformułowałeś pytanie, prawdopodobnie myślisz teraz w dużym znaczeniu biznesowym, na przykład:
Chcę mieć pewność, że moja aplikacja może zrobić X .
Więc piszesz test end-to-end, który próbuje wykonać X i sprawdza, czy robi to poprawnie.
Bardziej konkretny
To wszystko jest bardzo autoreferencyjne, ale to dlatego, że do tego się sprowadza. Po prostu nie ma nic więcej.
Na przykład wyobraź sobie, że piszesz aplikację do tworzenia przepisów kulinarnych. Jedną cechą jest to, że jeśli dodasz różne ilości kilku różnych rodzajów sera, daje to odpowiednią temperaturę i czas, aby wszystkie się stopiły.
Możesz więc napisać test jednostkowy CheeseMeltCalculator
, w którym podajesz 100 g sera Gouda i 200 g sera Emmental, a następnie sprawdzasz, czy temperatura i czas się zgadzają. Oznacza to, że możesz być pewny, że CheeseMeltCalculator
działa na 100 g sera Gouda i 200 g sera. Teraz, jeśli powtórzysz ten test z 300 g Gouda zamiast 200 g, możesz być całkiem pewny , że działa on poprawnie dla różnych wartości. Można dodać do testów 0
, -1
a int.MaxValue
g Gouda, aby mieć pewność, że kod nie potknąć się (lub wycieczki prawidłowo zgodnie z przeznaczeniem) do wejścia dziwne.
Możesz napisać test integracji, aby sprawdzić, czy CheeseMeltCalculator
jest on poprawnie włączony do całego procesu obliczania temperatury i czasu żywności. Jeśli to się nie powiedzie, ale CheeseMeltCalculator
powyższe testy są w porządku, możesz mieć pewność, że błąd występuje w innych kalkulatorach lub w sposobie łączenia danych z różnych kalkulatorów.
I na koniec możesz napisać kompleksowy test do stworzenia całej receptury, a jedną z rzeczy, które sprawdzasz, jest temperatura i czas wyniku. Jeśli poprzednie 2 poziomy testów są w porządku, ale idzie to źle, możesz ponownie mieć pewność, że te części są poprawne, a błąd polega na tym, jak obliczenia temperatury są zintegrowane z aplikacją. Na przykład być może dane wejściowe użytkownika nie zostały poprawnie przesłane.
I wreszcie , jeśli wszystkie z tych testów są w porządku, możesz mieć pewność, że „ jeśli dodasz różne ilości kilku różnych rodzajów sera, zapewni to odpowiednią temperaturę i czas, aby wszystkie się stopiły ”
Krótko mówiąc
Chodzi o to, że nie możesz mieć testu „działa poprawnie”. Możesz przetestować tylko „Jeśli zrobię X, Y się zdarzy”.
Jest to jednak dokładnie to, co powinno zawierać specyfikacje techniczne projektu. Oświadczenie typu „ jeśli dodasz różne ilości kilku różnych rodzajów sera, zapewni to odpowiednią temperaturę i czas, aby wszystkie się stopiły ”, nie tylko daje klientowi jasne oczekiwania co do tego, co zrobi gotowy produkt, ale także może zostać obrócony w zautomatyzowane testy.
dodatkowe informacje
Użytkownik Richard dodał te informacje w edycji:
Martin Fowler ma bardzo ładne streszczenie na swojej stronie internetowej na temat najpopularniejszych strategii: https://martinfowler.com/articles/microservice-testing/
Nie chcę tego usuwać, ale chcę powiedzieć: w porównaniu z tą odpowiedzią nie jest to „podsumowanie”, ale raczej bardziej szczegółowe wyjaśnienie, z ładną grafiką i wszystkim innym.
Moja rada byłaby następująca: jeśli po przeczytaniu mojej odpowiedzi wszystko ma dla ciebie sens, to koniec. Jeśli wszystko nadal wydaje się niejasne, odłóż trochę czasu i przeczytaj link do artykułu.