当前位置:  开发笔记 > 编程语言 > 正文

单元测试导致sys.exit()

如何解决《单元测试导致sys.exit()》经验,为你挑选了5个好方法。

无论我做什么,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 "", line 1, in 
    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
>>> 

dmeister.. 28

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

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



1> dmeister..:

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

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


谢谢!仅供记录:if __name__ =='__ main__':unittest.main(exit = False)

2> Joe Skora..:

你的例子也在我的安装上退出.我可以让它执行测试并通过更改保持在Python中

unittest.main()

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

更多信息,请点击这里在Python库参考.



3> Allen..:

不要试图unittest.main()从IDLE 运行.它试图访问sys.argv,它正在获得IDLE开始的args.要么以与IDLE不同的方式运行测试,要么调用unittest.main()自己的Python进程.



4> John Milliki..:

弹出打开源代码unittest.py.在运行所有测试后unittest.main()硬编码调用sys.exit().用于TextTestRunner从提示符运行测试套件.



5> Aaron Hall..:

很高兴能够在第一次尝试unittest模块时证明你的测试工作,并且知道你不会退出Python shell.但是,这些解决方案取决于版本.

Python 2.6

我使用Python 2.6在工作中,import荷兰国际集团unittest2 as unittest(这是unittest在Python 2.7理应发现模块).

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和3

在Python 2.7及更高版本中,以下内容应该有效.

unittest.main(exit=False)

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有