无论我做什么,sys.exit()都会被unittest调用,甚至是最简单的例子。我无法判断我的安装是否搞砸了或者发生了什么。
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
>>>
答案 0 :(得分:26)
在新的Python 2.7版本中,unittest.main()有一个新参数。
如果“退出”设置为False
,则在执行sys.exit()
期间不会调用unittest.main()
。
答案 1 :(得分:13)
您的示例也在我的安装中退出。我可以让它执行测试并通过更改
保持在Python中unittest.main()
到
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
Python Library Reference中提供了更多信息here。
答案 2 :(得分:10)
请勿尝试从IDLE运行unittest.main()
。它试图访问sys.argv
,它正在获取IDLE开始的args。要么以与IDLE不同的方式运行测试,要么在自己的Python进程中调用unittest.main()
。
答案 3 :(得分:5)
将源代码弹出到unittest.py
。 unittest.main()
是硬编码的,可在运行所有测试后调用sys.exit()
。使用TextTestRunner
从提示符运行测试套件。
答案 4 :(得分:5)
很高兴能够在第一次尝试unittest模块时证明你的测试工作,并且知道你不会退出Python shell。但是,这些解决方案取决于版本。
我正在使用Python 2.6,import
ing unittest2 as unittest
(这是在Python 2.7中可能找到的unittest
模块)。
unittest.main(exit=False)
在Python 2.6的unittest2中不起作用,而JoeSkora的解决方案确实如此,并重申它:
unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
要将其分解为组件和默认参数,并为各种组合对象指定正确的语义名称:
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及更高版本中,以下内容应该有效。
unittest.main(exit=False)
答案 5 :(得分:1)
try:
sys.exit()
except SystemExit:
print('Simple as that, but you should really use a TestRunner instead')