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ą?
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ą?
Odpowiedzi:
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.
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.
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ć.
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ść.
DAMP - Zwroty opisowe i znaczące.
„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.
„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.
Wilgotne = „opisowe i znaczące zwroty” - testy jednostkowe powinny być w stanie „odczytać”:
Z artykułu:
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.
Co to znaczy i gdzie go używać?
DAMP ma zastosowanie głównie podczas pisania kodu testowego. Kod testowy powinien być bardzo łatwy do zrozumienia do tego stopnia, że dopuszczalna jest pewna nadmiarowość.
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.
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.
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.
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.