Słyszałem, jak ktoś powiedział, że testy jednostkowe (np. NUnit, jUnit, xUnit) powinny być
(Np. Testy jednostkowe powinny zawierać „wilgotny kod”, a nie „suchy kod”)
O czym oni rozmawiają?
unit-testing
Ian Ringrose
źródło
źródło
Odpowiedzi:
To równowaga, a nie sprzeczność
DRY wilgotne i nie są ze sobą sprzeczne, a oni zrównoważyć dwa różne aspekty kodu w konserwacji . Utrzymywalny kod (kod, który można łatwo zmienić) jest tutaj ostatecznym celem.
DAMP (opisowe i znaczące zwroty) poprawia czytelność kodu.
Aby zachować kod, najpierw musisz go zrozumieć. Aby to zrozumieć, musisz to przeczytać. Zastanów się przez chwilę, ile czasu spędzasz na czytaniu kodu. To dużo. DAMP zwiększa łatwość konserwacji, skracając czas niezbędny do odczytania i zrozumienia kodu.
DRY (nie powtarzaj się) promuje ortogonalność kodu.
Usunięcie duplikacji gwarantuje, że każda koncepcja w systemie ma jedną wiarygodną reprezentację w kodzie. Zmiana koncepcji pojedynczej firmy powoduje pojedynczą zmianę w kodzie. DRY zwiększa łatwość konserwacji, izolując zmianę (ryzyko) tylko do tych części systemu, które muszą się zmienić.
Dlaczego więc powielanie jest bardziej dopuszczalne w testach?
Testy często zawierają nieodłączne powielanie, ponieważ ciągle testują to samo, tylko z nieco innymi wartościami wejściowymi lub kodem konfiguracji. Jednak, w przeciwieństwie do kodu produkcyjnego, to powielanie jest zwykle izolowane tylko do scenariuszy w ramach jednego urządzenia testowego / pliku. Z tego powodu powielanie jest minimalne i oczywiste, co oznacza, że stwarza mniejsze ryzyko dla projektu niż inne rodzaje powielania.
Ponadto usunięcie tego rodzaju powielania zmniejsza czytelność testów. Szczegóły, które były wcześniej duplikowane w każdym teście, są teraz ukryte w nowej metodzie lub klasie. Aby uzyskać pełny obraz testu, musisz teraz mentalnie ponownie złożyć wszystkie te części razem.
Dlatego też, ponieważ powielanie kodu testowego często niesie mniejsze ryzyko i sprzyja czytelności, łatwo jest zobaczyć, jak uważa się go za akceptowalny.
Z zasady faworyzuj DRY w kodzie produkcyjnym, faworyzuj DAMP w kodzie testowym. Chociaż oba są równie ważne, przy odrobinie mądrości możesz przechylić równowagę na swoją korzyść.
źródło
„DAMP not DRY” ceni czytelność przy ponownym użyciu kodu. Idea DAMP zamiast DRY w przypadkach testowych polega na tym, że testy powinny być łatwe do zrozumienia, nawet jeśli oznacza to, że przypadki testowe mają czasem powtarzający się kod.
Zobacz także Czy zduplikowany kod jest bardziej tolerowany w testach jednostkowych?za dyskusję na temat zalet tego punktu widzenia.
Być może został wymyślony przez Jaya Fieldsa w odniesieniu do języków specyficznych dla domeny.
źródło
„SUCHY” to „Nie powtarzaj się”
Jest to termin używany do informowania ludzi o pisaniu kodu, który jest wielokrotnego użytku, abyś nie pisał podobnego kodu w kółko.
„DAMP” to „opisowe i znaczące zwroty”.
Termin ten ma na celu poinformowanie Cię o napisaniu kodu, który będzie łatwo zrozumiały dla osoby, która na niego patrzy. Jeśli będziesz przestrzegać tej zasady, będziesz mieć długie i opisowe nazwy zmiennych i funkcji itp.
źródło
Wilgotne = „opisowe i znaczące zwroty” - testy jednostkowe powinny być w stanie „odczytać”:
Z artykułu:
źródło
DAMP oznacza „opisowe i znaczące frazy” i jest przeciwieństwem DRY, nie w tym sensie, że mówi „wszystko powinno wyglądać jak śmietnik i być niemożliwe do odczytania”, ponieważ czytelność jest ważniejsza niż unikanie zbędnego kodu.
http://codeshelter.wordpress.com/2011/04/07/dry-and-damp-principles-when-developing-and-unit-testing/
źródło
Jest tu już kilka odpowiedzi, ale chciałem dodać kolejną, ponieważ nie sądziłem, że koniecznie wyjaśniają to tak dobrze, jak potrafią.
Ideą DRY (nie powtarzaj się) jest to, że w kodzie aplikacji chcesz uniknąć zbędnego lub gadatliwego kodu. Jeśli masz coś, co twój kod musi zrobić wiele razy, powinieneś mieć do tego funkcję lub klasę, zamiast powtarzać podobny kod w kilku miejscach.
Jest to dość dobrze znana koncepcja programowania.
DAMP (opisowe i znaczące zwroty) służy do testów jednostkowych. Chodzi o to, że nazwy metod testów jednostkowych powinny być długie i opisowe - w efekcie krótkie zdania opisujące to, co testujesz.
na przykład:
testWhenIAddOneAndOneIShouldGetTwo() { .... }
Kiedy czytasz nazwę metody DAMP taką jak ta, powinieneś dokładnie zrozumieć, co pisarz testowy próbował osiągnąć, nawet bez konieczności odczytywania kodu testowego (chociaż kod testowy może również podążać za tą koncepcją, oczywiście z niepotrzebnymi nazwami zmiennych, itp).
Jest to możliwe, ponieważ metoda testu jednostkowego ma bardzo specyficzne dane wejściowe i oczekiwane wyniki, więc zasada DAMP działa dla nich dobrze. Metody w głównym kodzie aplikacji raczej nie będą wystarczająco szczegółowe, aby uzasadnić takie nazwy, szczególnie jeśli napisałeś je z myślą o zasadzie DRY.
DAMP i DRY nie są ze sobą sprzeczne - obejmują różne aspekty pisania kodu - ale mimo to nie są zwykle używane razem, ponieważ metody napisane z myślą o zasadzie DRY byłyby ogólne i mało prawdopodobne, aby były odpowiednie na wysoce specyficzną nazwę metody. Dlatego, jak wyjaśniono powyżej, kod aplikacji powinien być SUCHY, a kod testu jednostkowego DAMP.
Mam nadzieję, że to trochę lepiej to wyjaśni.
źródło
Zgadzam się z Chrisem Edwardsem, że musisz znaleźć równowagę między nimi. Inną rzeczą, na którą należy zwrócić uwagę, jest to, że jeśli próbując usunąć duplikację, w końcu dodajesz dużo dodatkowej struktury w kodzie testu jednostkowego (tj. Przy ekstremalnym podejściu DRY), ryzykujesz wprowadzeniem tam błędów. W takiej sytuacji musiałbyś albo przetestować jednostki testami jednostkowymi, albo pozostawić fragmenty struktury nietestowane.
źródło
Nie chcę tutaj powielać wysiłku, ale możesz mieć testy, które są DAMP, ale mają zaletę DRY. Z drugiej strony testy DRY w niektórych przypadkach nie spełniają testów DAMP.
Pisałem na blogu o DRY vs DAMP, który zawiera kilka przykładów.
Żadne z tych podejść nie powinno być twoim jedynym rozwiązaniem, czasami DAMP to przesada, innym razem bardzo miły dodatek.
Zasadniczo należy stosować zasadę trzech. Jeśli zauważysz duplikację po raz trzeci, warto przyjrzeć się pisaniu testów w stylu DAMP, ale nawet wtedy nie wszystkie duplikacje są złe . Kontekst ma znaczenie.
źródło