【问题标题】:Missing test coverage pytest python class缺少测试覆盖率 pytest python 类
【发布时间】:2021-02-10 22:19:34
【问题描述】:

我正在使用 pytest --cov 测试我的代码,但我的一个模块的覆盖率为 0%。

该模块有一个这样的类声明:

class DataBaseMaker:
    @staticmethod
    def create_database():
        conn = sqlite3.connect("database.db")
        
    def __init__(self):
        self.foo = 'bar'
        

测试执行以下操作:

def test_create_database():
    DataBaseMaker.create_database()
    assert Path("database.db").is_file()

对此的测试覆盖率为 0% - 我在这里做错了什么?

【问题讨论】:

  • 很难用可重现的情况说,但听起来你没有运行你认为的文件。尝试向create_database添加异常,看看测试是否失败。
  • @Ned 感谢您的回复。我想我正在运行正确的测试和文件,因为在运行测试时会创建数据库文件。所有测试也都通过了。还是我误会了?
  • 很容易得到另一个代码副本,要么是因为编辑错误,要么是额外安装,或者其他原因。
  • @Ned 我不知道。该项目位于一个文件夹中,main.py 位于根文件夹中,模块文件夹包含 DataBaseMaker.py 和提到的类,以及一个包含包含测试的 Python 文件的测试文件夹。它实际上是 3 个文件 + requirements.txt 以及 pytest 和 coverage 生成的东西。
  • 这是个谜。我希望我能给你答案。

标签: python python-3.x pytest code-coverage pytest-cov


【解决方案1】:

我能够找出问题所在。这不是代码本身,而是我对 pytest 的调用。我做了pytest --cov *projectname* 其中 projectname 也是项目所在文件夹的名称。我想我是从 pytest 文档中得到的?不确定。

解决方案:我运行了pytest --cov .,果然我的课程现在有 100% 的覆盖率。如果有人对这种行为有解释,我很乐意学习。

【讨论】:

  • 您告诉 coverage 只测量 projectname 目录中的代码。通过更改为 .您告诉它测量在当前目录中找到的任何代码。但是您的 DataBaseMaker 类不是在 projectname 目录中吗?应该是测量过的。
  • 是的。结构是 projectname/class.py 和 projectname/tests/testclass.py 所以两者都在同一个目录中。
  • 如果你能把代码和命令打包成其他人重现问题的方式,我们或许能找到一个好的答案。
猜你喜欢
  • 2016-12-07
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 2019-09-19
相关资源
最近更新 更多