Ho appena iniziato a utilizzare il modulo Coverage.py e così ho deciso di fare un semplice test per verificare come funziona.Come utilizzare correttamente coverage.py in Python?
Sample.py
def sum(num1, num2):
return num1 + num2
def sum_only_positive(num1, num2):
if num1 > 0 and num2 > 0:
return num1 + num2
else:
return None
test.py
from sample import sum, sum_only_positive
def test_sum():
assert sum(5, 5) == 10
def test_sum_positive_ok():
assert sum_only_positive(2, 2) == 4
def test_sum_positive_fail():
assert sum_only_positive(-1, 2) is None
Come si vede, tutto il mio codice è coperto di test e py.test dice tutti loro passano. Mi aspetto che Coverage.py mostri una copertura del 100%. Beh no.
Beh, Coverage.py potrebbe non vedere test.py di file, così ho copiato funzioni di test per sample.py
di file e corse di nuovo Copertura:
poi ho aggiunto questo blocco di codice:
if __name__ == "__main__":
print(sum(2, 4))
print(sum_only_positive(2, 4))
print(sum_only_positive(-1, 3))
e rimosso tutte le funzioni di test. Dopo di che, Coverage.py mostra 100%:
Perché è così? Coverage.py non dovrebbe coprire la copertura del test del codice, non solo la copertura dell'esecuzione? Ho letto un F.A.Q. ufficiale per Coverage.py, ma non riesco a trovare la soluzione.
Dal momento che molti utenti SO hanno familiarità con il test del codice e la copertura del codice, spero che tu possa dirmi, dove mi sbaglio.
Ho un solo pensiero qui: Coverage.py può semplicemente osservare quali righe di codice non sono state eseguite, quindi dovrei scrivere test per quelle linee. Ma ci sono linee che sono già state eseguite, ma non sono coperte da test, quindi Coverage.py fallirà qui.
Come si richiama copertura/pytest? –
@Rogalski pytest: 'python -m py.test test.py' e copertura:' python -m coverage esegue sample.py' (su Windows) – Groosha