method - requests post body python
Unittest que causa sys.exit() (6)
No importa lo que haga sys.exit () es llamado por unittest, incluso los ejemplos más triviales. No puedo decir si mi instalación está en mal estado o qué está pasando.
IDLE 1.2.2 ==== No Subprocess ====
>>> import unittest
>>>
>>> class Test(unittest.TestCase):
def testA(self):
a = 1
self.assertEqual(a,1)
>>> unittest.main()
option -n not recognized
Usage: idle.pyw [options] [test] [...]
Options:
-h, --help Show this message
-v, --verbose Verbose output
-q, --quiet Minimal output
Examples:
idle.pyw - run default set of tests
idle.pyw MyTestSuite - run suite ''MyTestSuite''
idle.pyw MyTestCase.testSomething - run MyTestCase.testSomething
idle.pyw MyTestCase - run all ''test*'' test methods
in MyTestCase
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
unittest.main()
File "E:/Python25/lib/unittest.py", line 767, in __init__
self.parseArgs(argv)
File "E:/Python25/lib/unittest.py", line 796, in parseArgs
self.usageExit(msg)
File "E:/Python25/lib/unittest.py", line 773, in usageExit
sys.exit(2)
SystemExit: 2
>>>
No intente ejecutar unittest.main()
desde IDLE. Está intentando acceder a sys.argv
, y está obteniendo los argumentos con los que se inició el IDLE. Ejecute sus pruebas de una manera diferente a IDLE, o llame a unittest.main()
en su propio proceso de Python.
Pop abre el código fuente en unittest.py
. unittest.main()
está codificado para llamar a sys.exit()
después de ejecutar todas las pruebas. Use TextTestRunner
para ejecutar suites de prueba desde el aviso.
try:
sys.exit()
except SystemExit:
print(''Simple as that, but you should really use a TestRunner instead'')
Tu ejemplo también está saliendo en mi instalación. Puedo hacerlo ejecutar las pruebas y permanecer dentro de Python cambiando
unittest.main()
a
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
Más información está disponible aquí en la Referencia de la Biblioteca de Python.
Es agradable poder demostrar que tus pruebas funcionan cuando pruebas por primera vez el módulo unittest y saber que no saldrás de tu shell de Python. Sin embargo, estas soluciones dependen de la versión.
Python 2.6
Estoy usando Python 2.6 en el trabajo, import
unittest2 as unittest
(que es el módulo unittest
supuestamente encontrado en Python 2.7).
El unittest.main(exit=False)
no funciona en el testtest2 de Python 2.6, mientras que la solución de JoeSkora lo hace, y para reiterarlo:
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
Para dividir esto en sus componentes y argumentos predeterminados, con los nombres semánticos correctos para los diversos objetos compuestos:
import sys # sys.stderr is used in below default args
test_loader = unittest.TestLoader()
loaded_test_suite = test_loader.loadTestsFromTestCase(Test)
# Default args:
text_test_runner = unittest.TextTestRunner(stream=sys.stderr,
descriptions=True,
verbosity=1)
text_test_runner.run(loaded_test_suite)
Python 2.7 y 3
En Python 2.7 y superior, lo siguiente debería funcionar.
unittest.main(exit=False)
En la nueva versión de Python 2.7, unittest.main () tiene un nuevo argumento.
Si ''exit'' se establece en False
, no se llama a sys.exit()
durante la ejecución de unittest.main()
.