我有一个Python包(如果有区别的话,python3.6)我设计为以'Python-mpackagearguments运行,并且我想为uu main_uuy.py模块编写单元测试。我特别想验证它是否正确设置了退出代码。可以用吗runpy.run_模块执行mymain_u.py并测试退出代码?如果是,如何检索退出代码?在
更清楚地说,我的uu main_uu.py模块非常简单。它只是调用一个经过广泛单元测试的函数。但是当我最初编写umain_uuy.py时,我忘了将该函数的结果传递给exit(),因此我希望在单元测试中模拟main函数,以确保正确设置退出代码。我的单元测试看起来像:
@patch('my_module.__main__.my_main', return_value=2)
def test_rc2(self, _):
"""Test that rc 2 is the exit code."""
sys.argv = ['arg0', 'arg1', 'arg2', …]
runpy.run_module('my_module')
self.assertEqual(mod_rc, 2)
我的问题是,我怎么才能得到我在这里写的“mod_rc”?在
谢谢。在
Misko Hevery以前说过(我相信是在Clean Code Talks: Don't Look for Things中,但我可能错了)他不知道如何有效地对主要方法进行单元测试,所以他的解决方案是使它们变得非常简单,如果假设它们调用的(单元测试)代码的正确性,就可以从逻辑上证明它们是有效的。在
例如,如果您有一个离散的、经过测试的单元来解析命令行参数;一个执行实际工作的库;一个离散的、经过测试的单元,用于将完成的工作呈现为输出,那么一个按顺序调用这三个参数的main方法肯定可以工作。在
有了这个架构,你基本上只需要一个大的系统测试就可以了,这个测试除了“默认”的输出之外,它要么崩溃(因为你连接不正确),要么工作(因为它连接正确,所有的独立部分都能工作)。在
在这一点上,我不再假装知道我在说什么。几乎可以肯定有更好的方法来实现这一点,但坦率地说,您可以编写一个shell脚本:
这将以错误
iff
程序输出错误而退出,TravisCI或类似程序将视为构建失败。在相关问题 更多 >
编程相关推荐