2010-11-23 8 views
7

djangoのテストをcoverageで実行しようとしています。それは正常に動作しますが、カバレッジが開始される前に定義されているため、クラス定義は検出されません。django:カバレッジテストを実行中

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) 

私は何ができ、また、報道に含まクラスを持っている:私はカバレッジを計算するとき、私は、私が使用することを、テストランナーを以下のがありますか?さもなければ、私はかなり低いカバレッジを持っており、本当にカバーする必要のある場所を簡単に検出できません。

答えて

8

最も簡単なことは、テストランナーを実行するためにカバレッジを使用することです。あなたのランナーが「runner.py」と呼ばれている場合は、使用します。

coverage run runner.py 

をあなたは.coveragercファイルにあなたの4つの除外を置くことができ、あなたはのいずれかを維持することなく、あなたのカバレッジのコードのすべての利点を持っていますあなたのカバレッジコード。

関連する問題