在我的测试代码中,我的doctest失败了,但是脚本以零返回值退出,这会导致CI运行通过,而这不是有意的。
这是doctest模块的正确行为吗?
我的剧本结尾是:
if __name__ == '__main__':
import doctest
doctest.testmod()输出如下:
**********************************************************************
File "test/test.py", line 7, in __main__
Failed example:
f(1,0)
Expected:
-----
type: <type 'exceptions.ZeroDivisionError'>
value: integer division or modulo by zero
x
-----
Got:
-----
type: <type 'exceptions.ZeroDivisionError'>
value: integer division or modulo by zero
-----
**********************************************************************
1 items had failures:
1 of 1 in __main__
***Test Failed*** 1 failures.
tux@iPad:~/programming/exception-notifier(fix-travis)(0)$ echo $?
0发布于 2013-09-13 10:01:47
我发现使用doctest.testmod(raise_on_error=True)会在测试失败时引发异常,这将导致脚本以非零代码退出。
这里的Python文档
可选参数
raise_on_error默认为false。如果为真,则在示例中的第一次失败或意外异常时引发异常。这允许在死后调试失败。默认行为是继续运行示例。
发布于 2014-09-05 18:37:29
@fossilet的答案适用于正确破坏测试失败的构建,但在doctest能够将任何内容写入控制台之前就会引发异常。这使得您的日志对于识别问题没有多大用处。
另一种选择是打电话
sys.exit(doctest.testmod()[0])这使得进程退出代码等于失败的测试数。您的CI工具应该将非零退出代码解释为失败的构建。但是doctest输出仍然可以到达控制台。
https://stackoverflow.com/questions/18782721
复制相似问题