Aby załadować lub nie załadować danych do testów jednostkowych z plików zewnętrznych

17

Podczas testowania jednostek często zastanawiam się nad tym, ile danych przekazuję i oczekuję od testowanych jednostek, powinienem zawrzeć je w rzeczywistych plikach testowych.

Kompromis, z którym ciągle walczę, to:

  • Jeśli duża część testu (w objętości kodu) składa się z danych wejściowych i wyjściowych, odczytanie testu wydaje się trudne, ale łatwo mogę zobaczyć rzeczywiste wejścia i wyjścia.
  • Jeśli wczytuję dane testowe z plików, mogę łatwo przetestować wiele odmian możliwych danych wejściowych, łatwo ponownie użyć danych testowych do wielu testów, ale muszę zostawić kod źródłowy, aby spojrzeć na inny plik, aby zobaczyć, jakie dokładnie są dane wejściowe .

Czy któryś z nich jest anty-wzorem?

DudeOnRock
źródło
Jakie rodzaje danych?
Jon Reid,
@JonReid: głównie tekst.
DudeOnRock

Odpowiedzi:

11

Aby odpowiedzieć bezpośrednio na twoje pytanie - nie, nie uważam, że któryś z nich jest anty-wzorem, gdy jest właściwie stosowany.

--- Więcej pełnych odpowiedzi ---

Z mojego doświadczenia wynika, że ​​zależy to w dużej mierze od celu twojego testu. Oto ogólna zasada, z której korzystałem w przeszłości i pomogła mi zdecydować:

Czy faktycznie testujesz małą jednostkę kodu? (Prawdziwy test jednostkowy)

Jeśli tak, to stwierdziłem, że znacznie łatwiej jest utworzyć dane w samym teście, ponieważ dokładnie widzę, co jest przekazywane. W takich przypadkach zwykle szukam biblioteki podobnej do Jasmine , ponieważ znajduję to ułatwia tworzenie i utrzymywanie danych testowych. Jest to jednak osobista preferencja - używaj tego, co ułatwia pracę.

Jeśli nie, prawdopodobnie faktycznie testujesz sam system. W takich przypadkach często ładuję dane ze źródła zewnętrznego, a powodem tego są:

  1. Ten test nie dotyczy klarowności kodu dla programistów (chociaż jest to nadal ważne - ktoś musi to utrzymywać), polega na przepuszczeniu wystarczającej liczby różnych typów danych przez całą część systemu, aby mieć pewność, że działa.
  2. Często napiszę kod instalacyjny, aby załadować i wykorzystać dane testowe, ale same dane są tworzone przez kogoś innego (zwykle w moim przypadku pracownika QA). Ci ludzie zwykle nie są programistami, więc nie mogę oczekiwać, że będą edytować kod.

Tak krótka odpowiedź, zależy od tego, co testujesz i dlaczego. Oba podejścia są przydatne i mają swoje miejsce - wybierz to, co najlepiej pasuje do twojej sytuacji.

nadrees
źródło
9

Nie widzę tutaj kompromisu. Kod źródłowy ma opisywać algorytmy, a przynajmniej logikę biznesową, a nie duże ilości danych. Jeśli piszesz transformatę Fouriera, chcesz sprawdzić, czy ton zatokowy jest poprawnie odwzorowany na pojedynczy pik, mieszany dźwięk na więcej pików itp., Ale w tym celu całkowicie wystarczy wprowadzić plik o nazwie sinus.wavdo procedury i sprawdzić, czy struktura wyjściowa jest taka, jakiej oczekujesz.

Jasne, technicznie rzecz biorąc, nie masz bezpośredniej pewności, że sinus.wavtak naprawdę zawiera ton zatokowy, ale jak powiedziałeś, podanie 100 000 wartości amplitud w źródle tak naprawdę nie daje ci tego - w rzeczywistości jest gorzej , ponieważ ty może przynajmniej odtworzyć zewnętrzny plik z odtwarzaczem audio, aby to sprawdzić, podczas gdy wartości danych zakopanych w kodzie źródłowym są w zasadzie niemożliwe do wykonania.

Kilian Foth
źródło