Pytest-cov zeigt 0 % oder eine geringe Abdeckung für das getestete Modul – Verzeichnis vs. explizite DateienPython

Python-Programme
Anonymous
 Pytest-cov zeigt 0 % oder eine geringe Abdeckung für das getestete Modul – Verzeichnis vs. explizite Dateien

Post by Anonymous »

Ich habe gerade ein paar Stunden damit verbracht, ein frustrierendes pytest-cov-Problem zu debuggen, und wollte mitteilen, was ich herausgefunden habe, da ich diesen speziellen Fall nirgendwo dokumentiert finden konnte.
Beim Ausführen von pytest tests/ --cov=mypackage wurde eine Abdeckung von 29 % für ein Modul angezeigt, das 100 % hätte betragen sollen. Und allein das Ausführen von Tests für dieses spezifische Modul zeigte eine 100-prozentige Abdeckung.
Wenn Sie Folgendes ausführen:
pytest tests/ --cov=mypackage
  • pytest verarbeitet Tests in einer anderen Reihenfolge als wenn Sie Dateien explizit auflisten:
    pytest tests/test_auth.py tests/test_other.py --cov=mypackage
In meinem Fall führte eine frühe Testdatei dazu, dass mein Zielmodul importiert wurde, bevor mit der Messung der Abdeckung begonnen wurde. Das Modul wurde mit 0 Zeilen registriert, und als später tatsächliche Tests ausgeführt wurden, wurde die Abdeckung nicht erneut gemessen.
Anstelle von:
pytest tests/ --cov=mypackage
Explizite Dateiauflistung verwenden:
pytest tests/test_target.py tests/test_other.py tests/subdir/ --cov=mypackage
Fügen Sie die Tests für Ihre wichtigsten Abdeckungsziele ZUERST in die Liste ein.
Wenn Sie Dateien explizit auflisten:
  • pytest verarbeitet sie in IHRER Reihenfolge
  • Das Zielmodul wird während seiner eigenen Tests importiert (mit aktiver Abdeckung)
Wenn pytest über das Verzeichnis erkennt:
  • Es verarbeitet in seiner eigene Reihenfolge (oft alphabetisch)
  • Einige nicht verwandte Tests könnten einen Import Ihres Moduls auslösen
  • Coverage sieht das Modul, aber mit 0 ausgeführten Zeilen
  • Spätere Tests führen den Code aus, aber Coverage hat das Modul bereits „gesehen“
Wenn Sie dieses Problem vermuten, versuchen Sie Folgendes:
coverage run -m pytest tests/test_target.py tests/test_other.py
Abdeckungsbericht
im Vergleich dazu:
coverage run -m pytest tests/
Abdeckungsbericht
Wenn der erste eine höhere Abdeckung anzeigt, ist dieser Fehler aufgetreten.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post