Джанго: проведение тестов с покрытием - PullRequest
8 голосов
/ 23 ноября 2010

Я пытаюсь запустить тесты на django с coverage.Он отлично работает, но не определяет определения классов, потому что они определены до начала покрытия.У меня есть следующий участник теста, который я использую при вычислении покрытия:

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)

Что я могу сделать, чтобы классы также были включены в покрытие?В противном случае у меня достаточно низкий охват, и я не могу легко обнаружить места, которые действительно необходимо покрыть.

1 Ответ

9 голосов
/ 25 ноября 2010

Самое простое, что нужно сделать - это использовать покрытие для выполнения тестового бегуна. Если ваш бегун называется runner.py, используйте:

coverage run runner.py

Вы можете поместить свои четыре исключения в файл .coveragerc, и вы получите все преимущества своего кода покрытия, не сохраняя ни одного кода покрытия.

...