簡體   English   中英

pytest-cov 顯示沒有覆蓋

[英]pytest-cov showing no coverage

我有一個名為 CorGE 的 python 庫,其結構如下

  • 科爾格
    • 源代碼
      • __init__.py
      • 科爾格
        • __init__.py
        • 收集.py
        • 命令.py
    • 測試
      • __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)

和這樣的報告

Name                    Stmts   Miss  Cover
-------------------------------------------
src/CorGE/__init__.py       0      0   100%
src/CorGE/collect.py      127    127     0%
-------------------------------------------
TOTAL                     127    127     0%

我只是誤解了如何使用這個覆蓋工具嗎? 我花了一整天的時間嘗試這些命令的不同變體,但似乎沒有任何效果。 希望了解更多有關此的人的任何見解。

這是測試文件,以防萬一出現問題,比如沒有正確調用 src 文件或其他什么。

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()

好的,我想出了如何完成這項工作,但我對我的解決方案完全不滿意。 我所做的更改是在開發模式下安裝CorGE ,而不是通常使用pip install -e . 然后一切都開始工作了。

我現在正在運行pytest --cov . 從根CorGE目錄並獲取:

---------- 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%

為什么會這樣,我不知道。 為什么沒有這個它不起作用,我不知道更多。 希望這可以幫助其他人在未來對此感到沮喪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM