繁体   English   中英

即使测试失败,单元测试脚本也会返回退出代码 = 0

[英]Unit test script returns exit code = 0 even if tests fail

我的测试脚本如下所示:

import os
import sys
from unittest import defaultTestLoader as loader, TextTestRunner

path_to_my_project = os.path.dirname(os.path.abspath(__file__)) + '/../'
sys.path.insert(0, path_to_my_project)

suite = loader.discover('my_project')
runner = TextTestRunner()
runner.run(suite)

如果我运行这个脚本,输出是:

$ python3 runtest.py
.....F.....
======================================================================
FAIL: test_insert (fate.test.test_operators.OperatorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/chiel/Projects/tfate/libs/fate/../fate/test/test_operators.py", line 16, in test_insert
    self.assertEqual(expected, self.session.text[:14])
AssertionError: 'Foo import sys$' != 'Foo import sys'
- Foo import sys$
?               -
+ Foo import sys


----------------------------------------------------------------------
Ran 12 tests in 0.030s

FAILED (failures=1)

退出代码为零:

$ echo $?
0

但是,Python 文档指出“默认情况下 main 调用sys.exit()并带有一个退出代码,表明测试运行成功或失败。”

我的脚本有什么问题?

该代码未使用unittest.main 您需要使用TestResult.wasSuccessful检查结果并手动调用sys.exit

import sys

....

ret = not runner.run(suite).wasSuccessful()
sys.exit(ret)

我在获取TextTestRunner结果时遇到了一些麻烦。 对于像我这样的人,这是它的工作原理:

"""Run all tests inside of *_test.py modules located in the same directory."""


import sys
import unittest


if __name__ == '__main__':
    test_suite = unittest.defaultTestLoader.discover('.', '*_test.py')
    test_runner = unittest.TextTestRunner(resultclass=unittest.TextTestResult)
    result = test_runner.run(test_suite)
    sys.exit(not result.wasSuccessful())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM