2010-11-23 35 views
7

J'essaie d'exécuter des tests sur django avec coverage. Cela fonctionne correctement, mais il ne détecte pas les définitions de classe, car elles sont définies avant le démarrage de la couverture. Je suit coureur de test, que je l'utilise, lorsque je calcule la couverture:django: exécution de tests avec couverture

import sys 
import os 
import logging 

from django.conf import settings 

MAIN_TEST_RUNNER = 'django.test.simple.run_tests' 

if settings.COMPUTE_COVERAGE: 
    try: 
     import coverage 
    except ImportError: 
     print "Warning: coverage module not found: test code coverage will not be computed" 
    else: 
     coverage.exclude('def __unicode__') 
     coverage.exclude('if DEBUG') 
     coverage.exclude('if settings.DEBUG') 
     coverage.exclude('raise') 
     coverage.erase() 
     coverage.start() 
     MAIN_TEST_RUNNER = 'django-test-coverage.runner.run_tests' 

def run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]): 
    # start coverage - jeśli włączmy już tutaj, a wyłączymy w django-test-coverage, 
    # to dostaniemy dobrze wyliczone pokrycie dla instrukcji wykonywanych przy 
    # imporcie modułów 
    test_path = MAIN_TEST_RUNNER.split('.') 
    # Allow for Python 2.5 relative paths 
    if len(test_path) > 1: 
     test_module_name = '.'.join(test_path[:-1]) 
    else: 
     test_module_name = '.' 
    test_module = __import__(test_module_name, {}, {}, test_path[-1]) 
    test_runner = getattr(test_module, test_path[-1]) 
    failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive) 
    if failures: 
     sys.exit(failures) 

Que puis-je faire, d'avoir des classes aussi inclus dans la couverture? Sinon, j'ai une couverture assez faible et je ne peux pas facilement détecter les endroits qui ont vraiment besoin d'être couverts.

Répondre

8

La chose la plus simple à faire est d'utiliser la couverture pour exécuter le testeur. Si votre coureur est « runner.py », puis utilisez:

coverage run runner.py 

Vous pouvez mettre vos quatre exclusions dans un fichier .coveragerc, et vous aurez tous les avantages de votre code de couverture, sans garder l'un des votre code de couverture.