单元测试

2024-09-27 09:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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”?在

谢谢。在


Tags: 模块函数run代码pyselfmainmy
1条回答
网友
1楼 · 发布于 2024-09-27 09:24:28

Misko Hevery以前说过(我相信是在Clean Code Talks: Don't Look for Things中,但我可能错了)他不知道如何有效地对主要方法进行单元测试,所以他的解决方案是使它们变得非常简单,如果假设它们调用的(单元测试)代码的正确性,就可以从逻辑上证明它们是有效的。在

例如,如果您有一个离散的、经过测试的单元来解析命令行参数;一个执行实际工作的库;一个离散的、经过测试的单元,用于将完成的工作呈现为输出,那么一个按顺序调用这三个参数的main方法肯定可以工作。在

有了这个架构,你基本上只需要一个大的系统测试就可以了,这个测试除了“默认”的输出之外,它要么崩溃(因为你连接不正确),要么工作(因为它连接正确,所有的独立部分都能工作)。在


在这一点上,我不再假装知道我在说什么。几乎可以肯定有更好的方法来实现这一点,但坦率地说,您可以编写一个shell脚本:

python -m package args
test $? -eq [expected exit code]

这将以错误iff程序输出错误而退出,TravisCI或类似程序将视为构建失败。在

相关问题 更多 >

    热门问题