gpt4 book ai didi

python - 使用 IDLE 运行 Python PyUnit 单元测试

转载 作者:太空狗 更新时间:2023-10-29 18:22:35 25 4
gpt4 key购买 nike

有没有办法在 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()

当我使用 python fooTests.py 从 Cygwin shell 运行它时,它会产生:

$ python fooTests.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

但是,当我在 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
>>>

我做错了什么来产生这个回溯,特别是我如何修复它以便我可以在 IDLE 中执行运行->运行模块(或 F5)以快速运行单元测试?

(这肯定是一个简单的问题,但我试图弄明白的快速尝试被证明是徒劳的。)

最佳答案

没有人回答(我发现如果前几分钟没有任何答案,回答的可能性会大大降低:),所以我自己一直在研究这个问题。

不确定这是否是最优雅的解决方案,但改变:

if __name__ == '__main__':
unittest.main()

if __name__ == '__main__':
try: unittest.main()
except SystemExit: pass

似乎成功了。

我猜问题是(根据 http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-11/0239.html )unittest 模块通过调用 sys.exit 完成,这对于 IDLE 来说显然是有问题的,因为它想让 Python shell 保持运行,而当你运行它时这不是问题从命令行,无论如何它都希望将您转储到您已经运行的命令行。

我不知道这个捕获 SystemExit 事件并忽略它的解决方案是否有问题,但它似乎适用于我检查过的所有测试通过和部分测试失败的情况。

另请参阅此 StackOverFlow 帖子:What code can I use to check if Python is running in IDLE? ,它提供了一个测试来查看程序是否正在从 IDLE 中运行。

关于python - 使用 IDLE 运行 Python PyUnit 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com