首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缺少pytest-cov类声明的测试覆盖率

缺少pytest-cov类声明的测试覆盖率
EN

Stack Overflow用户
提问于 2016-01-19 16:49:55
回答 1查看 1.8K关注 0票数 6

我正在努力达到100%的覆盖率。

我有文件(app/ifaces.py):

代码语言:javascript
复制
import netifaces

class NoIPException(Exception):
    pass

def get_local_ips():
    ...(code here)

我还有个测试:

代码语言:javascript
复制
import pytest
import mock
import netifaces

from app import ifaces

def test_get_local_ips_normal_case():
....

当我手动运行测试时:

py.test -v -cov应用程序-cov-报告术语缺失

它报告100%的代码覆盖率: app/ifaces 16 0 100%

但是,当我将它作为“自运行”添加到测试中时,它报告说前六行没有包括在内:

代码语言:javascript
复制
if __name__ == "__main__":
    import sys
    pytest.main("-v %s --cov app/ifaces.py --cov-report term-missing" % sys.argv[0])

报告:

代码语言:javascript
复制
Name           Stmts   Miss  Cover   Missing
--------------------------------------------
app/ifaces        16      4    75%   1-6

如何添加自运行测试以获得与手动py.test执行相同的结果?结果之间有什么区别?为什么在第二种情况中没有报道app/ifaces.py中的6行呢?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-19 17:13:28

好吧,我找到理由了。

当从测试本身调用pytest时,所有导入都已经完成,因此不计算它们。

为了覆盖它,它们需要在pytest-cov执行过程中导入。

我的解决方案是使用pytest夹具进行导入: 1.从测试程序的顶部删除“从应用程序导入ifaces”。2.增加固定装置:

代码语言:javascript
复制
 @pytest.fixture
 def ifaces():
     from app import ifaces
     return ifaces

3.使其可作为测试的变量:

代码语言:javascript
复制
def test_get_local_ips_normal_case(ifaces)
    ....
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34882426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档