2010-06-12 4 views
1

Есть ли способ предотвратить ./manage.py test от запуска тестов на установленных приложениях, таких как django.contrib.auth?Запретить Django запускать тесты Contrib?

+0

IIRC 'django.contrib' - это каталог, а не приложение. Какие тесты находятся в этом каталоге? –

+3

вы можете просто запустить './manage.py test appname' –

+0

@ S.Lott по крайней мере, я получаю сбой для' test_current_site_in_context_after_login (django.contrib.auth.tests.views.LoginTest) 'при запуске'. /manage.py test'. –

ответ

0

Ну правильное решение, как сказал lazerscience:

python manage.py test appname appname.SomeTestCase appname.TestCase.test_method 

Когда вы просто run test command все приложения в INSTALLED_APPS будут опробованы в том числе из вно (например, авт, админ, сайты и т.д.).

Также, если какой-либо тест терпит неудачу, это означает, что что-то не работает должным образом, вы должны исправить проблему, а затем скрыть тест с ошибкой. Если тесты Django не работают, убедитесь, что вы используете стабильную версию.

+0

Как я ответил lazerscience: это не облегчает тестирование всего, скажем, 10 пользовательских приложений моего сайта сразу :( –

1

Я пишу пользовательский тестовый бегун для своего проекта, который идет по дереву проекта, импортирует все модули, выполняет итерации через классы в каждом модуле, ищет подклассы unittest.TestCase и добавляет их все в TestSuite, затем запускает их. Таким образом, я могу отфильтровать файлы django.contrib, а также включить некоторые из моих собственных unittest.TestCases, которые управляют.py игнорируются (потому что они не находятся в myapp/tests.py и т. Д.)

Я только просто написал это и, несомненно, полный ошибок, но на сегодняшний день это выглядит так:

from inspect import getmembers, isclass 
import os 
from os.path import join, relpath 
import sys 
from unittest import TestCase, TestLoader, TestSuite, TextTestRunner 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 
from django.test.utils import setup_test_environment 

sys.path.append('..') 


def import_module(modname): 
    print modname 
    try: 
     __import__(modname) 
     return sys.modules[modname] 
    except Exception as e: 
     print 
     print ' %s: %s' % (type(e).__name__, e) 


def get_modules(root): 
    for subdir, dirs, fnames in os.walk(root): 
     for fname in fnames: 
      if fname.endswith('.py'): 
       path = relpath(join(subdir, fname)) 
       modname = path.replace('/', '.')[:-3] 
       if modname.endswith('__init__'): 
        modname = modname[:-9] 
       if modname == '': 
        continue 
       yield import_module(modname) 


def get_testcases(module): 
    for name, value in getmembers(module): 
     if isclass(value) and issubclass(value, TestCase) and value is not TestCase: 
      print ' ', name, value 
      yield value 


def main(): 
    setup_test_environment() 

    testcases = set() 
    for module in get_modules(os.getcwd()): 
     for klass in get_testcases(module): 
      testcases.add(klass) 
    print 'found %d testcases' % (len(testcases),) 

    suite = TestSuite() 
    for case in testcases: 
     suite.addTest(TestLoader().loadTestsFromTestCase(case)) 

    print 'loaded %d tests' % (suite.countTestCases(),) 
    TextTestRunner(verbosity=2).run(suite) 


if __name__ == '__main__': 
    main() 
Смежные вопросы