Edycja: Oczywiście dołączyłem do dogrywki pro / con TDD i pominąłem pytanie nr 1:
1 - Wdrażanie testów jednostkowych w formularzach internetowych ASP.net:
Przede wszystkim, jeśli sądzisz, że możesz zmusić ich do współpracy z MVC, walcz o to jak wściekły jaskiniowiec. Jako programista interfejsu użytkownika / interfejsu użytkownika, .net MVC pomógł mi przestać nienawidzić platformy .net, dzięki czemu mogłem lepiej skoncentrować się na nienawidzeniu każdego rozwiązania sieciowego Java, na jakie kiedykolwiek natknąłem się. Testy jednostkowe są problematyczne, ponieważ formularze internetowe naprawdę zacierają linie między serwerem a stroną klienta. W każdej próbie przeprowadzania testów jednostkowych skupiłbym się na manipulacji danymi i (mam nadzieję) założyć, że formularze internetowe zajmują się normalizacją wprowadzania danych przez użytkownika pod maską.
2 - W pierwszej kolejności, czy warto przeprowadzać testy jednostkowe:
W porządku, pełne ujawnienie:
- Jestem głównie samoukiem. Moje formalne szkolenie sprowadza się do jednej klasy JavaScript, PHP i klasy C # oraz mojego osobistego studiowania zasad OOP i czytania z takich rzeczy jak Wzorce projektowe.
Jednak,
- Piszę głównie dla sieci klienckiej, a faktyczna część programowania znajduje się w jednym z najszybszych i najbardziej luźnych języków, jeśli chodzi o dynamiczne pisanie, funkcje pierwszej klasy i zmienność obiektów.
Oznacza to, że nie piszę dla tego samego kompilatora lub maszyny wirtualnej. Piszę dla około 4-20 różnych interpretacji trzech języków (tak, dwa z nich są jedynie deklaratywne, ale także określają podstawową fizyczną przestrzeń interfejsu, z którym pracuję czasami na różne sposoby) i robiłem to, ponieważ interpretacje były o wiele bardziej zróżnicowane niż obecnie. I nie, nie jestem tylko dzieckiem, które podłącza JQuery do aplikacji jednorazowych. Pomagam budować i utrzymywać dość wyrafinowane rzeczy z dużą złożonością elementów interfejsu użytkownika.
Tak, istnieje wiele możliwości wprowadzenia kilku poprawek tu i tam, aby stworzyć ogromną kaskadę niepowodzeń, jeśli twoje umiejętności projektowe są kompletne bzdury lub rzucasz przeciętnych twórców w dużych ilościach przy 1-2 problemach deweloperskich.
Rozumiem, co TDD powinno dla ciebie zrobić, że testy naprawdę polegają na zmuszeniu cię do dokładniejszego rozważenia projektu i skoncentrowania się na wymaganiach. W porządku, ale problem polega na tym, że podważa to, co powinieneś robić, czyli projektowanie interfejsu, na coś subtelnie, ale zasadniczo odmiennego, czyli projektowanie do testowania interfejsu. Różnica polega na tym, że narysuję wyraźny obraz, że mama nie będzie musiała odgadnąć znaczenia, i szybko wypełni całą stronę zielonym, abyś mógł być pierwszym dzieckiem, które uderzy kredkami w stół i krzyknie „gotowe! „ Przesuwając priorytet na wyniki nad proces i projekt, zasadniczo zachęcasz do kontynuacji implementacji kodu śmieci, który zwykle był przyczyną problemów.
I oczywiście istnieje „nie-rzeczywisty punkt”, ale często chwalony efekt uboczny samych testów jednostkowych, pomagający wykryć błędy regresji. Zwolennicy TDD wydają się być trochę obojętni na to, czy jest to właściwie cel, czy tylko sprytny efekt uboczny, IMO, ponieważ wiedzą cholernie dobrze lub podejrzewają, że to po prostu nie wystarczy, aby stwierdzić brak błędów w twoim kod, szczególnie w bardziej dynamicznym języku, takim jak JavaScript, w którym zakładanie, że można nawet przewidzieć każdy możliwy scenariusz w długim łańcuchu zależności, jest nierozsądne.
W JS jest miejsce na automatyczne testowanie, ale o wiele lepsze wykorzystanie czasu niż dołączanie testu jednostkowego do każdej „jednostki” kodu, która wchodzi w kontakt z inną, upewnia się, że nie masz obiekty śmieci, które duplikują pracę lub których zamierzone użycie jest tam semantycznie dwuznaczne. Przestrzegasz zasady SUCHEJ. Wyodrębniasz rzeczy do ponownego użycia / przenośności, gdy wartość tego staje się oczywista (i nie minuta wcześniej). Ustanawiasz spójne procesy i sposoby robienia rzeczy zgodnie z zasadą marchewki niż kija (tj. Zbyt łatwo jest używać swoich rzeczy we właściwy sposób, aby zawracać sobie głowę chęcią zrobienia tego w niewłaściwy sposób). I z miłości do wszystkich rzeczy foo i bar, nigdy nie poddajesz się masowym kaskadowym anty-wzorcom schematów dziedziczenia jako środka ponownego wykorzystania kodu.
Wszystkie powyższe pomogły mi poważnie ograniczyć trudne do zdiagnozowania błędy w moim kodzie i możesz zaufać, że jest to duży priorytet dla kogoś, kto pojawił się jako programista z zestawem przeglądarki, który nie miał nic lepszego do powiedzenia niż „ Wystąpił problem z obiektem typu „Obiekt” o tym wymyślonym numerze wiersza w nieokreślonym pliku. ” (gee, dzięki IE6) TDD, w mojej branży, nie zachęca do takich rzeczy. Przesunąłby fokus do 100% wyników w stosunku do procesu, w którym to, co znajduje się między punktem A i B, tak naprawdę nie ma znaczenia, dopóki działa. Jest to strata czasu, którą lepiej byłoby zastosować, aby upewnić się, że Twoje rzeczy są czytelne, przenośne i łatwe do modyfikacji bez wielu mylących uszkodzeń.
A może po prostu jestem zbyt zawadiacki w stosunku do paradygmatu, w którym jestem zakorzeniony, ale moim zdaniem robienie tego w pierwszej kolejności jest o wiele bardziej efektywnym wykorzystaniem czasu niż zakrywanie tyłka, gdy ty lub wszyscy inni na twoim zespół robi to źle. I nic nie powinno zmuszać cię do rozważenia projektu, a nie tylko wdrożenia rzeczy. Projekt powinien być dziwnym ołtarzem każdego programisty. I wszystko, co „zmusza cię” do właściwego postępowania lub chroni przed tobą, powinno być postrzegane z taką samą podejrzliwością zarezerwowaną dla butelek oleju węża, IMO. Olej z węża we współczesnym informatyce i ogólnym rozwoju, jeśli jeszcze tego nie wiesz, jest sprzedawany przez płynną tonę.