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?
unit-testing
anti-patterns
unit-test-data
DudeOnRock
źródło
źródło
Odpowiedzi:
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ą:
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.
źródło
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.wav
do procedury i sprawdzić, czy struktura wyjściowa jest taka, jakiej oczekujesz.Jasne, technicznie rzecz biorąc, nie masz bezpośredniej pewności, że
sinus.wav
tak 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.źródło