W ciągu ostatnich kilku tygodni zastanawiałem się, jak wypełnić lukę w naszej metodologii testowania. Upraszczając, testy jednostkowe są zbyt małe, a tradycyjne testy integracyjne są zbyt duże.
Częstym scenariusz pojawia się gdzie A
i B
stosowania zarówno komponent C
. Jednak A
i B
mają nieco inne wymagania dotyczące i zrobić nieco inne założenia dotyczące C
. Jeśli jestem programistą tego, A
jak i gdzie mam przetestować moje założenia C
?
Oczywiście testowanie jednostkowe A
przy wyśmiewanych założeniach C
jest odpowiednie do testowania A
w izolacji, ale nie testuje samych założeń.
Inną możliwością jest dodanie testów jednostkowych C
. Nie jest to jednak idealne, ponieważ w trakcie A
opracowywania zmiana testów C
przy zmieniających się założeniach A
będzie nadmiernie niezręczna. Rzeczywiście A
programista może nawet nie mieć odpowiedniego dostępu do testów jednostkowych C
(np. Biblioteki zewnętrznej).
Aby przedstawić to w bardziej konkretny przykład: Załóżmy, że jest to aplikacja węzłowa. A
i B
zależy od C
odczytu pliku (między innymi) i przechowywania zawartości pliku w przekazanym obiekcie C
. Początkowo wszystkie C
obsługiwane pliki są małe i można je odczytywać synchronicznie bez znaczącego blokowania. Jednak twórca B
zdaje sobie sprawę, że jego pliki stają się ogromne i musi przejść C
na odczyt asynchroniczny. Powoduje to sporadyczny błąd synchronizacji A
, który nadal zakłada C
synchroniczne czytanie plików.
Jest to rodzaj błędu, który jest niezwykle trudny do wyśledzenia z pełnych testów integracyjnych i może w ogóle nie zostać złapany w testach integracyjnych. Nie jest również wychwytywany przez A
testy jednostkowe, ponieważ A
założenia są kpione. Można go jednak łatwo złapać przez „mini” test integracyjny, który ćwiczy tylko A
i C
.
Znalazłem tylko kilka odniesień do tego typu testów. Integracja w małej , Komponent testy integracyjne , Dział Integracji Badań. Odnosi się również w pewnym stopniu do kierunku testowania BDD, a nie do formalnego testowania jednostki TDD.
Jak wypełnić tę lukę testową? W szczególności - gdzie mam umieścić takie testy? Jak wyśmiewać dane wejściowe A
i C
testy integracji „mini”? A ile wysiłku należy włożyć w rozdzielenie problemów związanych z testowaniem między tymi testami a testami jednostkowymi? Czy jest lepszy sposób na wypełnienie luki w testowaniu?