首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pytest-cov没有显示覆盖范围

pytest-cov没有显示覆盖范围
EN

Stack Overflow用户
提问于 2022-07-14 20:21:23
回答 1查看 328关注 0票数 2

我有一个名为CorGE的python库,其结构如下

  • __init__.py
  • CorGE
    • __init__.py
    • collect.py
    • command.py

  • CorGE

代码语言:javascript
复制
- tests 
    - \_\_init\_\_.py
    - test\_collect.py

我正试图用pytest-cov制作一份报道报告。我看到的每一个例子/文档都是这样的

pytest CorGE/tests/ --cov CorGE/

或者这个

python -m coverage run --source=CorGE/src/CorGE -m pytest CorGE/tests/

但是这会产生一个NoCoverageWarning

CoverageWarning: No data was collected. (no-data-collected)

像这样的报告

代码语言:javascript
复制
Name                    Stmts   Miss  Cover
-------------------------------------------
src/CorGE/__init__.py       0      0   100%
src/CorGE/collect.py      127    127     0%
-------------------------------------------
TOTAL                     127    127     0%

我只是误解了如何使用这个覆盖工具吗?我花了一整天的时间尝试这些命令的不同变体,但似乎没有什么效果。会喜欢对此有更多了解的人的任何见解。

这是测试文件,以防万一是问题所在,比如没有正确地调用src文件之类的。

代码语言:javascript
复制
import os
import shutil
import tempfile
import unittest

from CorGE.command import main

class CommandTests(unittest.TestCase):
    def setUp(self):
        self.temp_dir = tempfile.mkdtemp()

        # collect_genomes input
        self.data_dir = os.path.join('/'.join(__file__.split('/')[:-1]), "test-data")
        self.ncbi_species_fp = os.path.join(self.data_dir, "TEST_TXIDS")
        self.ncbi_accessions_fp = os.path.join(self.data_dir, "TEST_ACCS")
        self.local_db_fp = os.path.join(self.data_dir, "TEST_LOCAL/")

        # collect_genomes outputs
        self.nucl_fp = os.path.join(self.temp_dir, "nucleotide/")
        self.prot_fp = os.path.join(self.temp_dir, "protein/")
        self.outgroup_fp = os.path.join(self.temp_dir, "outgroup/")
    
    def tearDown(self):
        shutil.rmtree(self.temp_dir)
    
    def test_collect_genomes(self):
        main([
            "collect_genomes",
            self.temp_dir,
            "--ncbi_species", self.ncbi_species_fp,
            "--ncbi_accessions", self.ncbi_accessions_fp,
            "--local", self.local_db_fp,
            # --outgroup left as default "2173"
        ])

        self.assertEqual(os.listdir(self.outgroup_fp).sort(), ['GCF_000016525.1.faa', 'GCF_000016525.1.fna'].sort())
        self.assertEqual(os.listdir(self.nucl_fp).sort(), ['GCF_000012885.1.fna', 'GCF_000007725.1.fna', 'GCF_000020965.1.fna',\
            'GCF_001735525.1.fna', 'GCF_007197645.1.fna', 'GCF_001375595.1.fna', 'GCF_000218545.1.fna', 'GCF_000010525.1\n.fna',\
            'GCF_000378225.1.fna', 'GCF_900111765.1.fna', 'GCF_023159115.1.fna'].sort())
        self.assertEqual(os.listdir(self.prot_fp).sort(), ['GCF_000012885.1.faa', 'GCF_000007725.1.faa', 'GCF_000020965.1.faa',\
            'GCF_001735525.1.faa', 'GCF_007197645.1.faa', 'GCF_001375595.1.faa', 'GCF_000218545.1.faa', 'GCF_000010525.1\n.faa',\
            'GCF_000378225.1.faa', 'GCF_900111765.1.faa', 'GCF_023159115.1.faa'].sort())


if __name__ == "__main__":
    unittest.main()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-20 18:46:48

好的,我想出了办法,但是我对我的解决方案完全不满意。我所做的改变是在开发模式下安装CorGE,而不是通常使用pip install -e .,然后一切都开始工作了。

我现在从根目录pytest --cov .运行CorGE,并获得:

代码语言:javascript
复制
---------- coverage: platform linux, python 3.10.2-final-0 -----------
Name                    Stmts   Miss  Cover
-------------------------------------------
setup.py                    2      2     0%
src/CorGE/__init__.py       0      0   100%
src/CorGE/collect.py      127     19    85%
src/CorGE/command.py       43      5    88%
src/CorGE/extract.py      193    167    13%
src/__init__.py             0      0   100%
tests/__init__.py           0      0   100%
tests/test_command.py      35      1    97%
-------------------------------------------
TOTAL                     400    194    52%

为什么要这样,我不知道。为什么没有这个我就不知道了。希望这能帮助其他人在未来对此感到沮丧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72986258

复制
相关文章

相似问题

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