我是pytest和测试的新手。我有一个简单的程序,比如hi.py
def foo():
print('hello world')
def bar():
print('hello python')
if __name__ == "__main__":
foo()
bar()
我可以像一样运行上面的程序
python3 hi.py
我在test_hi.py
中有几个测试用例,如下面的
import pytest
def test_foo()
pass
def test_bar()
pass
为了增加代码覆盖率,我还想将其测试为python3 hi.py
,即如果采用__name__==__main__:
的方式。我不知道如何使用test_hi.py
中的测试用例来完成它。请帮忙。谢谢
我正在使用pytest 测试模块
python -m pytest --cov=hi.py
好的,所以我为我的问题找到的一个解决方案是免除if语句并实现100%覆盖。要做到这一点,我必须在if语句后面添加# pragma: no cover
,如下所示。
if __name__ == "__main__": # pragma: no cover
foo()
bar()
注释将告诉pytest跳过if语句,当您运行以下命令时,我可以获得100%的覆盖率
python -m pytest --cov=project
然而,它跳过了声明,我想报道它,而不是跳过它
我的代码覆盖率理论是,必须具有100%的覆盖率。除非你不能,然后你必须有0%的覆盖率。
您应该将源文件拆分为两个不同的文件夹。一个文件夹被测试覆盖并达到100%,另一个文件夹中的文件从未被测试,覆盖率为0%。
零覆盖率文件的一个例子是:
from hi import foo, bar
if __name__ == "__main__":
foo()
bar()