21

Ho appena iniziato a scrivere alcuni test unitari per un progetto Python che utilizzo l'unittest e la copertura. Sono solo testando una piccola percentuale, ma cercando di capire la copertura del codiceCopertura test unità Python

eseguo il mio test e ottenere la copertura utilizzando utilizzando il seguente

python -m unittest discover -s tests/ 
coverage run -m unittest discover -s tests/ 
coverage report -m 

Il problema che sto avendo è che la copertura è dicendo ho copertura del codice 44% e conta solo i file che:

  1. sono state analizzate al test di unità (tutti i file che non sono stati testati sono mancanti e non nella copertura complessiva)
  2. erano in librar anche nell'ambiente virtuale e nella copertura del codice dei test effettivi. Sicuramente non dovrebbe includere i test effettivi nei risultati?

Inoltre si dice i file che sono effettivamente testati in queste unit test hanno solo le prime righe testate (che sono nella maggior parte dei casi, le istruzioni di importazione)

Come faccio ad avere una copertura del codice più realistica o è così che deve essere?

risposta

18

Aggiungere --source=. alla linea di copertura corsa. Limiterà entrambi lo stato attivo alla directory corrente e cercherà i file .py che non sono stati eseguiti affatto.

+4

Grazie, questo funziona per me! 'coverage coverage --source = {dir} -m unittest discover -s tests /' coprirà {dir}. Posso chiederlo però: che ne dici di passare attraverso i sottodirmi (in modo ricorsivo)? – sunyata

+0

Ho scoperto che è possibile utilizzarlo per includere più directory/moduli: '--source = {dir1}, {dir2}, {etc}' (si noti che non c'è spazio dopo i segni di virgola). Sarebbe comunque utile con un'opzione ricorsiva, se disponibile, nel caso in cui nuovi moduli vengano aggiunti al codice sorgente. – sunyata

+0

Documentazione: [Uso della riga di comando Coverage.py] (https://coverage.readthedocs.io/en/latest/ cmd.html) – sunyata

1

Se si utilizza nose come testrunner invece, il plugin copertura per Fornisce

--cover-inclusive  Include all python files under working directory in 
         coverage report. Useful for discovering holes in test 
         coverage if not all files are imported by the test 
         suite. [NOSE_COVER_INCLUSIVE] 

    --cover-tests   Include test modules in coverage report 
         [NOSE_COVER_TESTS]