gpt4 book ai didi

python - 单元测试因 sys.exit 失败

转载 作者:行者123 更新时间:2023-12-01 11:35:22 25 4
gpt4 key购买 nike

我正在尝试使用 unittest 运行我的测试。这是我的结构:

projectname/
projectname/
foo.py
bar.py
tests/
test_foo.py
test_bar.py

我运行它:

cd tests/
python -m unittest discover

但在一个文件中,例如 foo.py,我使用了 sys.exit(0),unittest 并不喜欢它:

$ python -m unittest discover
....E.
======================================================================
ERROR: test_foo (...)
----------------------------------------------------------------------
Traceback (most recent call last):
...
...
File "/home/.../projectname/foo.py", line 12, in write
sys.exit(0)
SystemExit: 0

----------------------------------------------------------------------
Ran 6 tests in 0.018s

FAILED (errors=1)

sys.exit() 的使用是自愿的,我无法删除它。我知道 unittest.main 函数有一个名为 exit 的选项:

if __name__ == "__main__":
unittest.main(exit=False)

但我想测试tests 目录中的所有文件。另一种方法是:

if __name__ == '__main__':
tests = unittest.TestLoader().discover('.')
unittest.TextTestRunner(verbosity=1).run(tests)

它找到所有的 test_ 文件,但是 sys.exit() 使 unittest 崩溃。

最佳答案

sys.exit 实际上并没有退出解释器。它只是引发 SystemExit。如果该异常使其到达堆栈顶部,则解释器将启动退出过程(使用相关的退出值)。

unittest 不高兴,因为它正在捕获 SystemExit 异常(因此解释器实际上不会退出),但测试并未被描述为期望引发该异常.

尝试以下操作。

def test_exit_func(self):
with self.assertRaises(SystemExit):
sys.exit(0)

关于python - 单元测试因 sys.exit 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690278/

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