Mam sporą wiedzę na temat testów jednostkowych. Próbowałem przeczytać o umowach dotyczących kodu. Czy to naprawdę pomaga w testowaniu jednostkowym? Czy to jest przesadzone, szczególnie gdy mówimy o umowie kodowej pomagającej w przeprowadzaniu testów jednostkowych. Odnoszę się konkretnie do umów w .net 4.0. Używam nunit do testowania jednostkowego.Czy umowy na kody naprawdę pomagają w testowaniu jednostek?
Odpowiedz
Tak i Nie. Testy jednostkowe są w zasadzie umową, która mówi, że MyMethod() bierze X i oczekuje, że Y będzie wynikiem, a gdy tego nie zrobi, to testy jednostkowe zawiodą i zostaniesz ostrzeżony jako twórca MyMethod(), że się zepsułeś coś w tym. Umowy dotyczące kodu pomagają pisać testy jednostkowe, ponieważ wymagania w umowach ułatwiają poznanie wymagań testów jednostkowych podczas ich pisania. Jednak prawdziwy powód kontraktów kodu nie jest dla Ciebie, ale dla innych programistów korzystających z tworzonego API. Testy jednostkowe pozwalają poznać właściwe wejścia i wyjścia, ale kiedy wypuszczasz kod na wolność, testy jednostkowe nie są wydawane z rozszerzeniem .dll. Kontrakty na kod dają deweloperom inne korzyści z poznania, poprzez umowy na czas kompilacji i sprawdzenia, tych samych wymagań. Kontrakt chroni przed tymi programistami (ja), którzy mają okropną tendencję do nieodczytywania dokumentacji metod i po prostu zaczynają przekazywać rzeczy, więc teraz będą aktywnie ostrzegani przez kontrakty.
Nie, nie sądzę, że umowy kodowe pomagają w pisaniu testów jednostkowych. Testy jednostkowe określają zachowanie i ograniczenia danego działania. Jedna z tych specyfikacji napisana w testach jednostkowych może być taka, że argumenty metody nie mogą być puste.
W takim przypadku nadal trzeba napisać test jednostki. Umowa kodowa to sposób na wdrożenie specyfikacji, ale nie jedyny sposób.
Innymi słowy, nie zakładaj, że użycie umowy kodu oznacza, że nie musisz pisać testu jednostki! Jeśli ktoś zmieni umowę kodową lub ją usunie, nie będzie miał testu, który mówi, że ta zamierzona specyfikacja nie powiodła się.
Nie sądzę, aby ktokolwiek twierdził, że umowy kodowe powinny zastąpić testy jednostkowe. –
Zgadzam się, że umowy nie pomagają w pisaniu testów jednostkowych. Najlepiej byłoby, gdyby testy były na pierwszym miejscu, więc nie należy zawierać umów, dopóki nie zostanie sprawdzony test. Kontrakty można następnie napisać w celu egzekwowania wszelkich negatywnych ("należy rzucić") testów. –
Kontraktów kodowych można używać do celów, w których nie można stosować testów jednostkowych (umów na interfejsy). Stosowane są w łańcuchach dziedziczenia (gdzie można łatwo popełnić błędy przy ręcznym testowaniu jednostkowym). Zapewniają one automatyczną dokumentację (coś, czego testy jednostkowe nie mogą wykonać). Mogą zapewniać kontrole czasu wykonywania w trakcie produkcji (coś, czego nie mogą wykonać testy jednostkowe).
Z drugiej strony, umowy zawierane są tylko wtedy, gdy są realizowane, a więc bez testów jednostkowych nie masz zapewnień o jakości kodu (tzn. Że cały twój kod spełnia różne umowy). Te dwie koncepcje są bezpłatne.
- 1. Kody jednostek HTML do tekstu
- 2. Kod umowy na mono?
- 3. Czy wpisane tablice pomagają JIT w optymalizacji lepiej?
- 4. Czy istnieją narzędzia, które pomagają organizować #includes?
- 5. Błąd RSpec w testowaniu
- 6. Umowy na kod i asynchrony
- 7. Umowy na kod w czasie wykonywania
- 8. Testowanie jednostek - o ile więcej czasu to naprawdę dodaje?
- 9. Techniki systemu Android dla próbnego źródła danych w testowaniu jednostek aktywności
- 10. Testowanie rozwoju opartego na testowaniu, testowanie jednostki
- 11. Funkcje funkcji czasu pomagają informix
- 12. Testowanie jednostek Klasy abstrakcyjne w Groovy
- 13. manipulować bieżącym czasem w testowaniu jednostkowym?
- 14. Czy ruby naprawdę są językiem w pełni zorientowanym na obiekt?
- 15. Testowanie jednostek w Xcode, czy uruchamia aplikację?
- 16. Czy spinlocki naprawdę potrzebują DMB?
- 17. Czy __del__ naprawdę jest destruktorem?
- 18. Czy naprawdę używane są strumienie w ocaml?
- 19. Czy umowy kodowe należy stosować w celu zapewnienia bezpieczeństwa?
- 20. Co oznacza słowo "spec" w testowaniu Javascriptu
- 21. Android Licensing Verification Library kody odpowiedzi serwera
- 22. Czy ktoś zna kody wyjścia dla tfsbuild.exe?
- 23. Czy window.navigator.userAgent naprawdę będzie przestarzały?
- 24. Czy AngularJS naprawdę potrzebuje jQuery?
- 25. Czym jest naprawdę rzutka Rikulo?
- 26. Czy git zwraca określone kody błędów powrotu?
- 27. Czy CultureInfo.CurrentCulture jest naprawdę potrzebne w String.Format()?
- 28. Czy KillTimer jest naprawdę potrzebny?
- 29. Jak ustawić HTTP_USER_AGENT w testowaniu rspec
- 30. Clojure: Jak używać urządzenia w testowaniu
Ale czy to nie powiela mojej logiki? Mam na myśli, że będziemy mieć tę samą logikę (warunki wstępne i końcowe) dla umów i testów jednostkowych. –
To będzie, iz punktu widzenia purystów, powinno, ponieważ jeśli ktoś przypadkowo usunie umowę, testy jednostkowe będą nadal weryfikować logikę, że nie chcesz, aby zrobił coś, co może teraz zrobić, lub na odwrót. Umowy mogą być wskazówką do pisania testów jednostkowych, ale nadal nie zastępują ich. –
Trudno mi zgodzić się, że kontrakty są duplikatami testów jednostkowych. Umowy dotyczące kodów określają wymagania, testy jednostkowe potwierdzają, że są prawdziwe. W pewnym sensie testy sprawdzają, czy twoje kontakty są poprawne - kontrakty są możliwym do dostarczenia kodem i dlatego powinny zostać przetestowane. –