Piszę kod testowy dla funkcji przetwarzającej pliki PDF. Podstawowa idea testów polega na tym, że kieruję je w stronę wybranych plików PDF, które przetwarzam i sprawdzam, czy wyniki są zgodne z oczekiwaniami.
Moje pytanie brzmi: gdzie powinienem przechowywać te duże pliki PDF? Czy powinienem sprawdzić je w kontroli wersji wraz z kodem? Lub umieścić je gdzie indziej? Oczywiście kod testowy jest bezużyteczny bez plików PDF (lub nawet z różnymi plikami PDF), ale mimo to umieszczenie ich w naszym repozytorium wydaje się niewłaściwe.
testing
version-control
data
Swiftheart
źródło
źródło
Tests != Test Data
Odpowiedzi:
Twój system kontroli wersji powinien zawierać wszystko, czego potrzebuje do zbudowania, kompilacji, przetestowania i spakowania aplikacji do dystrybucji (np. MSI, RPM). Chciałbym również argumentować, że konfiguracje kompilacji i inne skrypty również powinny mieć kontrolę wersji.
Powinienem być w stanie sprawdzić projekt i mieć pełne środowisko kompilacji, kompilacji i testowania.
Istnieją dwa podejścia do sprawdzania danych testowych. Najpierw możesz sprawdzić same dane testowe (w tym przypadku pliki PDF). Po drugie, możesz wpisać dane źródłowe, które można wykorzystać do wygenerowania danych testowych (jeśli dotyczy). Może to być skrypt SQL załadowany do pustej bazy danych zawierającej dane testowe lub plik tekstowy, który można skompilować do pliku PDF lub innego pliku.
Inni mogą nie zgodzić się na sprawdzenie wszystkiego w zakresie kontroli wersji, ale z mojego doświadczenia zawodowego przekonałem się, że kluczowe znaczenie ma zapewnienie, że pełne środowisko będzie mogło zostać odbudowane od podstaw.
źródło
Jeśli testy są bezużyteczne bez przygotowanych plików instalacyjnych, warto dołączyć pliki do VCS wraz z kodem testowym.
Chociaż pliki użyte w teście nie są kodem, można je wyświetlić jako zależność, na której opiera się kod. Dlatego warto trzymać wszystko razem.
Kontrapunktem jest to, że niektóre VCS nie radzą sobie dobrze z dużymi plikami binarnymi, a inne mają silny sprzeciw wobec umieszczania jakiegokolwiek pliku binarnego w VCS. Jeśli któryś z tych przypadków dotyczy Ciebie, sensowne byłoby również przechowywanie plików testowych w dobrze znanej lokalizacji, do której można łatwo uzyskać dostęp.
Zastanowiłbym się również nad umieszczeniem komentarza w kodzie testowym, który mówi: „polega na
foo.pdf
przeprowadzeniu wszystkich testów”.źródło
Jeśli są to dane statyczne, to tak, umieść je w kontroli wersji. Te pliki tak naprawdę się nie zmienią po zalogowaniu; zostaną one usunięte, jeśli ta funkcja nie będzie już potrzebna, lub zostaną dodane nowe pliki testowe. Tak czy inaczej, nie musisz się martwić, że słabe binarne różnice zajmują miejsce.
Jeśli generujesz dane testowe, np. losowo, należy automatycznie zapisać go, gdy test się nie powiedzie, ale w przeciwnym razie odrzuć. Wszelkie dane zapisane w ten sposób powinny zostać przekształcone w regularne testy regresji, aby te przypadki brzegowe były zdecydowanie testowane w przyszłości, zamiast polegać na losowaniu.
źródło
Zdecydowanie dołącz te dane do swoich testów i głównego kodu aplikacji. Pomaga mieć naprawdę dobrze zorganizowany zestaw testów - więc jeśli testujesz ekstrakcję pdf (i masz ten kod ładnie zamknięty), powinieneś być w stanie zbudować ścieżkę do danych testowych, na podstawie ścieżki do kodu aplikacji - to zawsze działało dla mnie.
Za pomocą git możesz skonfigurować .gitignore, aby uniemożliwić tymczasowe wyjście lub rejestrowanie testów przed zanieczyszczeniem twojego repozytorium.
źródło