2009-10-09 10 views
5

Mam plik make dla systemu skryptowego, z wieloma testami, które powinny przejść. Każdy test to osobne wywołanie skryptu:GNU make: odwracanie sukcesu podprocesowego?

#---------------------------------------------------------------------------- 
# run test scripts in the module::test 
#---------------------------------------------------------------------------- 
scripted_tests: bin/kin modules/test/actor_equality.kin modules/test/actor_fibre.kin ... 
    bin/kin modules/test/actor_equality.kin 
    bin/kin modules/test/actor_fibre.kin 
    ... 

Co jest w porządku. Mam również kilka podobnych testów, które powinny zwrócić błąd. Wiem, że - zignoruje status powrotny, ale musi być coś prostego, aby odwrócić stan powrotu więc mogę uruchomić

#---------------------------------------------------------------------------- 
# run test scripts in the module::test::errors 
#---------------------------------------------------------------------------- 
inverse_tests: bin/kin modules/test/error/bad_function.kin ... 
    not bin/kin modules/test/error/bad_function.kin 
    ... 

Odpowiedz

8

użyć polecenia !.

echo This returns success 
! echo This returns failure 
+1

W szczególności jego "! Bin/kin" zamiast "! Bin/kin", który próbowałem i dostałem błąd –

+0

Bardzo przydatny przy używaniu grep do testowania obecności komunikatu o błędzie na wyjściu dziennika kompilacji. '! grep output.log -i "error msg" ' – shuckc

1

Załóżmy, że chcemy, aby upewnić się, że stan wyjścia "bin/Kin test5.kin" to 5. Następnie wystarczy napisać to:

run-test5: 
    bin/kin test5.bin; test $$? = 5 

Dla bardziej opracowanych testów patrz 'badanie help' i "test man".

Uwaga: staram się unikać wykrzykników, ponieważ zwykle nie można ich skopiować/wkleić w interaktywną powłokę (ponieważ przeszukuje historię).