ncr*_*fer 3 python unit-testing python-unittest
我正在尝试使用 unittest 运行我的测试。这是我的结构:
projectname/
projectname/
foo.py
bar.py
tests/
test_foo.py
test_bar.py
Run Code Online (Sandbox Code Playgroud)
我运行它:
cd tests/
python -m unittest discover
Run Code Online (Sandbox Code Playgroud)
但是在一个文件中,例如foo.py,我使用了 a 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)
Run Code Online (Sandbox Code Playgroud)
的sys.exit()使用是自愿的,我无法将其删除。我知道有一个调用exitunittest.main 函数的选项:
if __name__ == "__main__":
unittest.main(exit=False)
Run Code Online (Sandbox Code Playgroud)
但是我想测试tests目录中的所有文件。另一种方法是:
if __name__ == '__main__':
tests = unittest.TestLoader().discover('.')
unittest.TextTestRunner(verbosity=1).run(tests)
Run Code Online (Sandbox Code Playgroud)
它找到所有的test_文件,但sys.exit()使 unittest 崩溃。
sys.exit实际上并没有退出解释器。它只是提高SystemExit。如果该异常到达堆栈顶部,则解释器将启动退出过程(使用相关的退出值)。
unittest不高兴,因为它正在捕获该SystemExit异常(因此解释器实际上不会退出),但该测试并未被描述为期望引发该异常。
请尝试以下操作。
def test_exit_func(self):
with self.assertRaises(SystemExit):
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)