Unittest causing sys.exit()
不管我做什么,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"设置为
您的示例也正在退出我的安装。我可以让它执行测试,并通过更改
1 | unittest.main() |
到
1 | unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test)) |
有关更多信息,请参阅python库参考。
不要试图从空闲状态运行
很高兴能够证明您的测试在第一次尝试UnitTest模块时是有效的,并且知道您不会退出Python shell。但是,这些解决方案依赖于版本。
Python 2.6我在工作中使用的是python 2.6,
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) |
弹出打开源代码到
1 2 3 4 | try: sys.exit() except SystemExit: print('Simple as that, but you should really use a TestRunner instead') |