Ponieważ tak naprawdę nie mam doświadczenia w testowaniu jednostkowym, staram się zebrać kilka zasad, których najpierw się nauczę.
Uważnie ucz się „reguł” dotyczących problemów, których nigdy nie spotkałeś. Jeśli natkniesz się na jakieś „zasady” lub „najlepszych praktyk”, chciałbym zaproponować znalezienie prosty przykład zabawki, gdzie ta zasada jest „niby” mają być stosowane, i stara się rozwiązać ten problem samodzielnie , ignorując to, co mówi, że „zasada”.
W takim przypadku możesz spróbować wymyślić 2 lub 3 proste klasy i niektóre zachowania, które powinny zastosować. Zaimplementuj klasy w dowolny sposób i napisz test jednostkowy dla każdego zachowania. Zrób listę problemów, które napotkałeś, np. Jeśli zacząłeś od pracy w jedną stronę, a potem musiał wrócić i zmienić to później; jeśli masz wątpliwości co do tego, jak rzeczy mają do siebie pasować; jeśli denerwujesz się pisaniem bojlera; itp.
Następnie spróbuj rozwiązać ten sam problem, postępując zgodnie z „zasadą”. Ponownie zrób listę napotkanych problemów. Porównaj listy i zastanów się, które sytuacje mogą być lepsze, jeśli zastosujesz się do reguły, a które nie.
Jeśli chodzi o twoje aktualne pytanie, preferuję podejście oparte na portach i adapterach , w którym rozróżniamy „logikę podstawową” i „usługi” (jest to podobne do rozróżnienia między czystymi funkcjami a skutecznymi procedurami).
Podstawowa logika polega na obliczaniu rzeczy „wewnątrz” aplikacji w oparciu o domenę problemową. To może zawierać zajęcia takie jak User
, Document
, Order
, Invoice
, itd. Dobrze jest mieć podstawowe klasy zadzwonić new
do innych klas podstawowych, ponieważ są one „wewnętrzne” szczegóły wykonania. Na przykład utworzenie i Order
może również utworzyć Invoice
i Document
wyszczególnić to, co zostało zamówione. Nie trzeba kpić z nich podczas testów, ponieważ to są rzeczy, które chcemy przetestować!
Porty i adaptery to sposób, w jaki podstawowa logika współdziała ze światem zewnętrznym. To gdzie takie rzeczy jak Database
, ConfigFile
, EmailSender
itp żyć. Są to rzeczy, które utrudniają testowanie, dlatego wskazane jest, aby utworzyć je poza podstawową logiką i przekazać je w razie potrzeby (z zastrzykiem zależności lub jako argumenty metody itp.).
W ten sposób podstawowa logika (która jest częścią specyficzną dla aplikacji, w której ważna logika biznesowa żyje i podlega największej rezygnacji) może zostać przetestowana samodzielnie, bez konieczności dbania o bazy danych, pliki, wiadomości e-mail itp. Możemy po prostu podać kilka przykładowych wartości i sprawdzić, czy otrzymujemy właściwe wartości wyjściowe.
Porty i adaptery można testować osobno, wykorzystując symulacje bazy danych, systemu plików itp. Bez konieczności dbania o logikę biznesową. Możemy po prostu podać niektóre przykładowe wartości i upewnić się, że są one przechowywane / czytane / wysyłane / itp. odpowiednio.