导致sys.exit()的单元测试

时间:2020-03-05 18:57:51  来源:igfitidea点击:

无论我做什么,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
>>>

解决方案

回答

不要尝试从IDLE运行unittest.main()。它试图访问sys.argv,并且获取了IDLE开始时使用的args。以不同于IDLE的方式运行测试,或者在其自己的Python进程中调用unittest.main()

回答

示例也在我的安装中退出。我可以通过更改使其执行测试并保留在Python中

unittest.main()

unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))

在Python库参考中可以找到更多信息。

回答

弹出打开源代码到" unittest.py"。运行所有测试后,对unittest.main()进行硬编码以调用sys.exit()。使用TextTestRunner从提示符运行测试套件。

回答

try:
    sys.exit()
except SystemExit:
    print('Simple as that, but you should really use a TestRunner instead')

回答

在新的Python 2.7版本中,unittest.main()具有新的参数。

如果将" exit"设置为" False",则在执行" unittest.main()"期间不会调用" sys.exit()"。