如何测试或模拟“如果__name__ =='__main__'”内容

尼古拉:

说我有一个包含以下内容的模块:

def main():
    pass

if __name__ == "__main__":
    main()

我想为下半部分编写一个单元测试(我想实现100%的覆盖率)。我发现执行导入/ 设置机制runpy内置模块__name__,但是我不知道如何模拟或检查是否调用main()函数。

到目前为止,这是我尝试过的:

import runpy
import mock

@mock.patch('foobar.main')
def test_main(self, main):
    runpy.run_module('foobar', run_name='__main__')
    main.assert_called_once_with()
备忘录:

我将选择另一种替代方法,将其if __name__ == '__main__'从覆盖率报告中排除,当然,只有在测试中已经具有main()函数的测试用例的情况下,您才能这样做。

至于为什么我选择排除而不是为整个脚本编写新的测试用例的原因是,因为正如我所说的那样,您已经为您的main()函数准备了一个测试用例,所以您为脚本添加了另一个测试用例(只是为了拥有一个测试用例)。 100%的覆盖率)将只是重复项。

有关如何排除的信息,if __name__ == '__main__'您可以编写coverage配置文件并添加到部分报告中:

[report]

exclude_lines =
    if __name__ == .__main__.:

可以在此处找到有关coverage配置文件的更多信息

希望这会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在“if __name__ == '__main__'”中模拟.patch 变量

如果__name__ =='__main__'函数调用

if __name__ ==“ __main__”的位置:

替代 if __name__ == '__main__':

如何使用 if __name__ == '__main__':

如果__name__ =='__main__'不起作用ipython

如果__name__ ==“ __main__”条件(带烧瓶/弹性豆茎)

如果在IPython中__name__ =='__main__'

__name__ ==“ __main__”怎么办?

来自 if __name__ == "__main__" 的返回语句

如果 __name __ == '__main__', gunicorn 是否也执行

R是否等效于pythonic的“如果__name__ ==“ __main__”:main()“?

是否有C与Python等效:如果__name__ =='__main__':在文件顶部写入main()?

在C ++中模拟__name__ == __main__是否导致错误“未定义类似函数的宏”

python if __name__ ==“ __main__”:IndentationError:预期为缩进块

使用python-multiprocessing与if __name__ =='__main__'相关的谜

使用 if __name__ == "__main__" 从其他文件调用函数:

将多个参数传递给 Python __name__=="__main__"

为什么不将__name__ =='__main__'放在模块的开头?

Python:如果__name__ =='__main__',则导入并初始化Argparse?

Python:如果__name__ =='__main__',则导入并初始化Argparse?

如果__name__ =='__main__':语句下写很多代码是否常见?

如果__name__ =='__main__',则相当于python的node.js

Python:命令行,sys.argv,“如果__name__ =='__main__'”

如果__name__ ==“ __main__”,则Apache上托管的web.py不会在一边运行代码:

如何启动 __name__ == '__main__': 使用来自另一个 .py 文件的特定输入?

Pycharm“Python 控制台”中的 exec(open) 函数不执行“if __name__ == '__main__”块

在Python中调用getLogger之前,是否需要显式检查__name__ ==“ __main__”?

if __name__ == "__main__": 做什么?它是干什么用的?