oprócz roundup i shunit2 mój przegląd jednostkowych shell narzędzi testowania zawarte również assert.sh i shelltestrunner.
W większości zgadzam się z autorską krytyką shunit2 (część z nich jest subiektywna), więc wykluczyłem shunit2 po zapoznaniu się z dokumentacją i przykładami. Chociaż wyglądał znajomo, mając pewne doświadczenie z jUnit.
Moim zdaniem shelltestrunner jest najbardziej oryginalnym narzędziem, na które patrzyłem, ponieważ używa prostej składni deklaratywnej do definicji przypadku testowego. Jak zwykle, każdy poziom abstrakcji daje pewną wygodę kosztem pewnej elastyczności. Mimo, że prostota jest atrakcyjna, znalazłem narzędzie zbyt ograniczone do tego, co miałem, głównie z powodu braku możliwości zdefiniowania działań setup/tearDown (na przykład, manipulowanie plikami wejściowymi przed testem, usuwanie plików stanu po teście itp.).
Początkowo byłem nieco zdezorientowany, że assert.sh pozwala tylko potwierdzać stan wyjścia lub wyjścia, podczas gdy ja potrzebowałem obu. Wystarczająco długo, aby napisać kilka przypadków testowych za pomocą podsumowania. Wkrótce jednak okazało się, że tryb zaokrąglania jest niewygodny, ponieważ spodziewany jest niezerowy status wyjścia, w niektórych przypadkach jako sposób komunikacji z wynikiem dodatnim do standardowego, co powoduje, że przypadek testowy nie powiedzie się we wspomnianym trybie. One of the samples przedstawia rozwiązanie:
status=$(set +e ; rup roundup-5 >/dev/null ; echo $?)
Ale co jeśli trzeba zarówno niezerowym wyjścia i wyjście? Mógłbym oczywiście przed wywołaniem set +e
i po lub set +e
dla całego przypadku testowego. Ale jest to sprzeczne z zasadą łapanki "Everything is an Assertion". Czułem, że zaczynam pracować przeciwko temu narzędziu.
Wtedy zdałem sobie sprawę „wadę” The assert.sh za zezwoleniem tylko dochodzić zarówno stanu wyjścia i wyjścia właściwie nie problem, jak można po prostu przejść w test
z wyrażenia złożonego tak
output=$($tested_script_with_args)
status=$?
expected_output="the expectation"
assert_raises "test \"$output\" = \"$expected_output\" -a $status -eq 2"
Ponieważ moje potrzeby były naprawdę podstawowe (uruchomić zestaw testów, wyświetlić, że wszystko poszło dobrze lub co nie), podobała mi się prostota assert.sh, więc to właśnie wybrałem.
Można również sprawdzić bashtest util: https: // GitHub.com/pahaz/bashtest (jest to prosty sposób pisania testów bash) – pahaz
Roundup formalizuje dla ciebie kilka zadań/tagów. Po przejściu przez garb nauki, jest to całkiem przydatne. Osobiście bardziej podoba mi się podejście haridsv, ponieważ nie wymaga instalowania kolejnego pkg. Zastosowałem to podejście do skryptów powłoki i testów Pythona. – todo
Sprawdź ten przegląd prawie każdego możliwego narzędzia: https://medium.com/wemake-services/testing-bash-applications-85512e7fe2de – sobolevn