Mam skrypt, który prowadzi wiele testów jednostkowych, ale po trafieniu sterowania C po prostu wychodzi z poszczególnych testów jednostkowych, a nie cały skrypt. Czy jest jakiś sposób, jaki mogę to osiągnąć? To mój kod, który faktycznie wykonuje wykonanie testów jednostkowych.

    #bitshift right to obtain correct return value, execution of each test.
    returnValue = os.system(path) >> 8
    #running total of failures in the program.
    failures += returnValue

W ten sposób nazywam tę funkcję i opuściłem program.

failures = execTests(path, testList)
#exit program with returncode as number of failures
sys.exit(failures)
3
Alan Gordon 4 grudzień 2013, 19:42

2 odpowiedzi

Najlepsza odpowiedź

Czy próbowałeś użyć próbowania / z wyjątkiem (najwyraźniej próbować bla bla bla z wyjątkiem klawiorkujących), a następnie albo używany SYS.Exit (awarie) bezpośrednio lub włóż kilka razy, aby wyjść z dowolnej pętli, w której możesz być używany sys.exit (awarie). Inną opcją będzie pisać awarie do pliku tekstowego, a następnie użyj SYS.EXIT () bez żadnych argumentów. Następnie istnieje klasyczna poprawa pracy z linii poleceń jako admin. Alternatywnie Python może czekać na zakończenie testu; Naciśnięcie Ctrl + C znowu powinien go zamknąć. Oczywiście można wybrać mniejszą opcję zapisu wyjścia do pliku tekstowego, a następnie za pomocą OS.System ("Taskkill ..."), aby wyjść z wyjątkiem Pythona (nie polecam tego). Tylko kilka myśli.

1
KnightOfNi 4 grudzień 2013, 15:52

W rzeczywistości ta funkcja jest już obecna w API. Jadąc z biblioteki standardowej Python , 25.3. UNITTEST - Ramy testowania jednostki Oto odpowiednie fragment:

{x0}} , --catch

Control - c podczas badania biegu czeka na zakończenie bieżącego testu, a następnie do tej pory zgłasza wszystkie wyniki. Drugi Control - C podnosi normalny wyjątek KeyboardInterrupt.

Zobacz Obsługa sygnału dla funkcji, które zapewniają tę funkcjonalność.

2
Community 20 czerwiec 2020, 09:12