Chi*_*ael 10 python unit-testing python-idle
在IDLE中,有没有办法直接运行PyUnit(unittest模块)单元测试?
我问,因为我有一个简短的测试模块,当我从Cygwin shell运行python mymodule.py时,我得到了所有测试,但是当我从IDLE使用Run-> Run Module时测试通过,但后来我得到一个异常( SystemExit:False).
例如,这是一个示例测试模块来重现这个:
#!/usr/bin/python
import unittest
class fooTests(unittest.TestCase):
def setUp(self):
self.foo = "bar"
def testDummyTest(self):
self.assertTrue(True)
def testDummyTestTwo(self):
self.assertEquals("foo", "foo")
def tearDown(self):
self.foo = None
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
当我使用python fooTests.py从Cygwin shell运行它时,它会产生:
$ python fooTests.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Run Code Online (Sandbox Code Playgroud)
但是当我在IDLE中编辑fooTests.py并运行Run - > Run Module时,由IDLE生成的新Python Shell会产生:
>>> ================================ RESTART ================================
>>>
..
----------------------------------------------------------------------
Ran 2 tests in 0.031s
OK
Traceback (most recent call last):
File "C:\Some\path\info\I\shortened\fooTests.py", line 20, in <module>
unittest.main()
File "C:\Python26\lib\unittest.py", line 817, in __init__
self.runTests()
File "C:\Python26\lib\unittest.py", line 865, in runTests
sys.exit(not result.wasSuccessful())
SystemExit: False
>>>
Run Code Online (Sandbox Code Playgroud)
我做错了什么,产生这个回溯,特别是如何修复它以便我可以在IDLE中运行Run-> Run Module(或F5)来快速运行单元测试?
(这肯定是一个简单的问题,但我快速尝试解决这个问题已经证明没有结果.)
没有人回答(我发现如果前几分钟没有任何答案,答案的可能性会大大降低:),所以我一直在研究这个问题.
不确定这是否是最优雅的解决方案,但更改:
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
至
if __name__ == '__main__':
try: unittest.main()
except SystemExit: pass
Run Code Online (Sandbox Code Playgroud)
似乎做了伎俩.
我想问题是(根据http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-11/0239.html),unittest模块通过调用sys.exit完成,这显然有问题对于IDLE,因为它想要保持Python shell的运行,而当你从命令行运行它时不会出现问题,而命令行无论如何都希望将你转发回已经运行的命令行.
我不知道这个解决方案,捕获SystemExit事件并忽略它是否有问题,但它似乎适用于我检查的所有测试通过和一些测试失败的情况.
另外:请参阅此StackOverFlow帖子:我可以用什么代码来检查Python是否在IDLE中运行?,它提供了一个测试,以查看程序是否在IDLE内运行.
小智 7
你也可以
if __name__ == '__main__':
unittest.main(exit=False)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Python> = 2.7
| 归档时间: |
|
| 查看次数: |
4242 次 |
| 最近记录: |