Pracuję nad przetwarzaniem obrazu (głównie OCR) i zastanawiam się, jak powinienem zintegrować testy jednostkowe w moim rozwoju.
Już używam testów jednostkowych dla bardziej „powszechnego” typu kodu, ale w przypadku kodu przetwarzania obrazu nie jestem pewien, jak sobie z tym poradzić. Ten rodzaj kodu zawsze wymaga wejścia / wyjścia danych obrazu, a kpienie z tego nie jest oczywiste. Na razie głównie przeprowadzam testy integracyjne, ale ich uruchomienie zajmuje trochę czasu i chciałbym kilka pomysłów, jak rozbić ten rodzaj kodu na testy jednostkowe, aby móc je szybciej uruchomić.
Edycja: Analiza postaci może przechodzić przez wiele etapów obejmujących wielokrotne obracanie, skalowanie i operacje morfologiczne. Kroki te zmieniają się często w miarę opracowywania algorytmu. W ten sposób dane wejściowe i oczekiwane wyniki mogą się znacznie zmieniać podczas testowania. Każdy znak może mieć rozmiar 100 x 100 pikseli, więc zakodowanie go na stałe w kodzie lub praca z wygenerowanymi danymi nie wchodzi w rachubę.
źródło
Odpowiedzi:
Pracuję z oprogramowaniem do nagrywania wideo / analizy / przesyłania strumieniowego i napotkaliśmy bardzo podobny problem. Poniżej znajduje się nasze rozwiązanie, nie jestem pewien, jak to się uda na dłuższą metę, ale na razie wydaje się, że działa.
Zapisz obrazy wejściowe / wyjściowe jako zasoby w projekcie testu jednostkowego. Następnie sprawdź, czy w teście jednostkowym podano konkretne dane wejściowe, że dane wyjściowe są generowane.
9/10 razy, kiedy refaktoryzujesz kod i dodajesz inne funkcje, możesz oczekiwać, że zachowanie procedur obsługi obrazu nie zmieni się, więc jeśli wszystkie nagłe testy jednostkowe zaczną się nie powieść, prawdopodobnie jest to spowodowane błędem.
Z drugiej strony, jeśli wprowadzisz zmiany w faktycznym algorytmie, spowoduje to również niepowodzenie testu jednostkowego. W takim przypadku należy ręcznie / wizualnie sprawdzić, czy wyniki są poprawne, a jeśli wyglądają dobrze, należy zaktualizować zasoby obrazu, aby ponownie przejść test jednostkowy.
W naszym projekcie opracowaliśmy „fałszywe” (lub fałszywe, jeśli chcesz) źródła wideo, które mogą dostarczać nam dane zarówno do wejścia, jak i do wyjścia. Ale same dane nie są fałszywe, w rzeczywistości zostały przechwycone za pomocą klas rejestrujących dane pomocnicze z działającego systemu, gdy przeprowadziliśmy testy ręczne i zweryfikowaliśmy, że wszystko działa.
źródło