2015-06-01 11 views
15

Ho un semplice test:Utilizzo della copertura, come posso testare questa linea?

class ModelTests(TestCase): 

    def test_method(self): 
     instance = Activity(title="Test") 
     self.assertEqual(instance.get_approved_member_count(), 0) 

Il mio problema è che la copertura mostra ancora get_approved_member_count linea come non testato:

enter image description here

Come faccio a soddisfare quanto sopra per la copertura?

Per eseguire i test che sto usando Django naso con copertura:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 

NOSE_ARGS = [ 
    '--with-coverage', 
    '--cover-html', 
    '--cover-package=apps.users,apps.activities', 
] 

Console:

rapporto
python manage.py test 
/Users/user/Documents/workspace/api/env/lib/python3.4/importlib/_bootstrap.py:321: RemovedInDjango19Warning: django.contrib.contenttypes.generic is deprecated and will be removed in Django 1.9. Its contents have been moved to the fields, forms, and admin submodules of django.contrib.contenttypes. 
    return f(*args, **kwds) 

/Users/user/Documents/workspace/api/env/lib/python3.4/importlib/_bootstrap.py:321: RemovedInDjango19Warning: The utilities in django.db.models.loading are deprecated in favor of the new application loading system. 
    return f(*args, **kwds) 

nosetests --with-coverage --cover-html --cover-package=apps.users,apps.activities --verbosity=1 




Name              Stmts Miss Cover Missing 
--------------------------------------------------------------------------------------- 
apps.activities           0  0 100% 
apps.activities.admin         8  8  0% 1-14 
activities.migrations        0  0 100% 
activities.migrations.0001_initial     9  0 100% 
apps.activities.urls          8  0 100% 


etc etc etc 
--------------------------------------------------------------------------------------- 
TOTAL              670 232 65% 
---------------------------------------------------------------------- 
Ran 79 tests in 17.101s 
+0

Il modo in cui vai è giusto. Qual è l'output del test se si chiama direttamente questo test? – tjati

+0

@omeinusch il test restituisce solo un conteggio durante i test questo è 0 in produzione questo è più. Ho ipotizzato che fosse coperto ma la copertura dice ancora che 'get_approved_member_count()' 'non è coperto. – Prometheus

+2

Si prega di pubblicare l'output completo della console compresa la chiamata e l'output fornito dal proprio runner di test. – tjati

risposta

13

La copertura indica che il metodo viene chiamato (è verde linea 80). Ma mostra anche che non è mai stato definito (la riga 75 è rossa).

Questo è un classico problema di avvio della copertura troppo tardi. Il modo più semplice per risolvere questo problema è quello di utilizzare una copertura per eseguire il test runner, invece di utilizzare il test runner di correre la copertura:

$ coverage run -m nose --verbosity=1 

AGGIORNATO: da utilizzare con il comando originale:

$ coverage run manage.py test 

ma vorresti prima disinstallare il plugin di copertura del naso.

+3

Posso confermare di aver visto questo stesso comportamento e la soluzione di Ned ha risolto il problema per me. Pensavo di aver visto questo documentato in passato (o nei documenti della copertura o nei documenti del naso), ma non riesco a trovarlo ora. – Waylan

+1

Grazie per la risposta. Questo ha molto senso. Sto usando Django e il runner di prova di Django Nose, ho qualche possibilità con questo? – Prometheus

+2

@OrbiterFleet ho aggiornato la risposta. –