我试图达到100%的覆盖率。
我有文件(app / ifaces.py):
import netifaces
class NoIPException(Exception):
pass
def get_local_ips():
...(code here)
我有测试:
import pytest
import mock
import netifaces
from app import ifaces
def test_get_local_ips_normal_case():
....
当我手动运行测试时:
py.test -v --cov app --cov-report term-missing
它报告100%的代码覆盖率: app / ifaces 16 0 100%
但当我将其添加为'自运行'在测试中,它报告说前六行未被覆盖:
if __name__ == "__main__":
import sys
pytest.main("-v %s --cov app/ifaces.py --cov-report term-missing" % sys.argv[0])
报告:
Name Stmts Miss Cover Missing
--------------------------------------------
app/ifaces 16 4 75% 1-6
如何添加自运行测试以获得与手动py.test执行相同的结果?结果有什么区别?为什么app / ifaces.py中的6行被报告为第二种情况未被覆盖?
感谢。
答案 0 :(得分:1)
好的,我找到了一个理由。
当从测试本身调用pytest时,所有导入都已经完成,因此它们不算作覆盖。
要覆盖它们,需要在pytest-cov执行期间导入它们。
我的解决方案是使用pytest fixtures进行导入: 1.从测试程序的顶部删除“从应用程序导入ifaces”。 2.添加夹具:
@pytest.fixture
def ifaces():
from app import ifaces
return ifaces
3.使其可以作为变量传递给测试:
def test_get_local_ips_normal_case(ifaces)
....