不管我做什么,unittest都会调用sys.exit(),甚至是最简单的例子。我不知道我的安装是否有问题或发生了什么。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 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
>>> |
在新的python 2.7版本中,unittest.main()有一个新的参数。
如果"exit"设置为False,则在执行unittest.main()期间不调用sys.exit()。
您的示例也正在退出我的安装。我可以让它执行测试,并通过更改
到
1
| unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test)) |
有关更多信息,请参阅python库参考。
不要试图从空闲状态运行unittest.main()。它试图访问sys.argv,并获取空闲的参数。要么用与空闲不同的方式运行测试,要么在自己的python进程中调用unittest.main()。
很高兴能够证明您的测试在第一次尝试UnitTest模块时是有效的,并且知道您不会退出Python shell。但是,这些解决方案依赖于版本。
Python 2.6
我在工作中使用的是python 2.6,importing unittest2 as unittest(据推测是python 2.7中的unittest模块)。
unittest.main(exit=False)在Python2.6的UnitTest2中不起作用,而Joeskora的解决方案起作用,并重申:
1
| unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test)) |
要将其分解为组件和默认参数,并为各种组合对象使用正确的语义名称:
1 2 3 4 5 6 7 8 9
| 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和3
在Python2.7及更高版本中,以下内容应该有效。
1
| unittest.main(exit=False) |
弹出打开源代码到unittest.py。unittest.main()是硬编码的,运行完所有测试后调用sys.exit()。使用TextTestRunner从提示运行测试套件。
1 2 3 4
| try:
sys.exit()
except SystemExit:
print('Simple as that, but you should really use a TestRunner instead') |