Sembra che python nosetest si chiuderà quando viene rilevato "sys.exit()", e il mocking di questo built-in non funziona. Grazie per i suggerimenti.Come aggirare "sys.exit()" in python nosetest?
11
A
risposta
22
È possibile provare ad individuare l'eccezione SystemExit. Viene generato quando qualcuno chiama sys.exit()
.
with self.assertRaises(SystemExit):
myFunctionThatSometimesCallsSysExit()
7
import sys
sys.exit = lambda *x: None
Tenete a mente che i programmi possono ragionevolmente aspettarsi di non continuare dopo sys.exit()
, quindi l'applicazione di patch fuori non potrebbe effettivamente aiutare ...
+0
Non necessariamente. Io uso sys.exit() per demonizzare il mio server. –
5
Se stai usando mock
patchare sys.exit
, è potrebbe essere corretto in modo errato.
Questo piccolo test funziona bene per me:
import sys
from mock import patch
def myfunction():
sys.exit(1)
def test_myfunction():
with patch('foo.sys.exit') as exit_mock:
myfunction()
assert exit_mock.called
invocato con:
nosetests foo.py
uscite:
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
1
Questo è un esempio nel quadro unittest
.
with self.assertRaises(SystemExit) as cm:
my_function_that_uses_sys_exit()
self.assertEqual(cm.exception.code, expected_return_code)
Problemi correlati
- 1. Esclusione directory, modulo in python nosetest
- 2. python sys.exit non funziona in prova
- 3. I nosetest Python saltano determinati Test
- 4. python 2 code: se python 3 then sys.exit()
- 5. Come utilizzare le estensioni C in python per aggirare GIL
- 6. Ottenere i nosetest di Python produce un metodo tearDown()
- 7. Come si esegue nosetest da pycharm?
- 8. Python: variabili condizionali in base al fatto che nosetest sia in esecuzione
- 9. Python: Perché `sys.exit (msg)` chiamato da un thread non stampa `msg` in stderr?
- 10. Nosetest tra cui directory superiori indesiderati
- 11. Utilizzo di nosetest in PyCharm con python 2 e 3 installati fianco a fianco
- 12. pyinstaller exe non sta morendo dopo sys.exit()
- 13. Come aggirare l'avviso "rvalore usato come lvalue"?
- 14. È equivalente a sys.exit per aumentare SystemExit?
- 15. Elenca tutti i test trovati da Nosetest
- 16. API Nosetest e Google: "nessun modulo denominato apiclient.discovery"
- 17. Come aggirare il paradosso della tassonomia?
- 18. Come aggirare la restrizione della fase GHC?
- 19. Come aggirare la limitazione di calcolo JavaScript
- 20. Come aggirare il reindirizzamento di FormSpree?
- 21. Come uscire in Python 3.2?
- 22. Perché i metodi sys.exit(), exit(), raise SystemExit non funzionano?
- 23. Come posso aggirare il problema "" in sqlite eC#?
- 24. Come aggirare il self-refencing in una query DELETE
- 25. Come aggirare la mancanza di campi astratti in Java?
- 26. Come posso aggirare questo problema creando un ambiente virtualenv con un Python personalizzato?
- 27. Perché finalmente il blocco si sta eseguendo dopo aver chiamato sys.exit (0) in eccetto il blocco?
- 28. Interrompe il nosetest dalla stampa delle informazioni di registrazione?
- 29. sostituzione signal.alarm in Windows [Python]
- 30. Come aggirare l'errore "Metodo troppo grande" nella compilazione Java?
con self.assertRaises (SystemExit): myFunction() –
Brilliant! È molto utile quando lavori con script di altre persone e orchestra le utility di automazione :) – theMarceloR