2015-06-01 3 views
15

У меня есть простой тест:Использование покрытия, как проверить эту строку?

class ModelTests(TestCase): 

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

Моя проблема заключается в том, что покрытие по-прежнему показывает get_approved_member_count линию, как не прошедшие испытания:

enter image description here

Как удовлетворить выше для покрытия?

Для запуска тестов я использую Django нос Покрытие:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 

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

консоли:

отчет
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

То, как вы идете, является правильным. Каков тестовый результат, если вы прямо вызываете этот тест? – tjati

+0

@omeinusch тест просто возвращает счет во время тестов, это 0 в производстве, это больше. Я предположил, что это выше, но покрытие по-прежнему говорит: 'get_approved_member_count()' 'не распространяется. – Prometheus

+2

Пожалуйста, разместите полный вывод консоли, включая ваш вызов и вывод, указанный вашим тестовым бегуном. – tjati

ответ

13

Покрытие показывает, что метод вызывается (строка 80 зеленого цвета). Но это также показывает, что он никогда не определялся (строка 75 красная).

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

$ coverage run -m nose --verbosity=1 

ОБНОВЛЕНО: использовать с оригинальной командой:

$ coverage run manage.py test 

но вы хотите сначала удалить плагин для покрытия носа.

+3

Я могу подтвердить, что я видел такое же поведение, и решение Ned решило проблему для меня. Я думал, что видел это в прошлом (либо в документах по охвату, либо в документах носа), но, похоже, не может найти его сейчас. – Waylan

+1

Благодарим вас за ответ. Это имеет большой смысл. Я использую Django и тестировщик Django Nose, есть ли у меня какие-либо опции? – Prometheus

+2

@OrbiterFleet Я обновил ответ. –