Предотвратить Django от выполнения тестов contrib? - PullRequest
1 голос
/ 13 июня 2010

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

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Я пишу специальный тестовый прогон для своего проекта, который просматривает дерево проекта, импортирует все модули, просматривает классы в каждом модуле, ищет подклассы unittest.TestCase и добавляет их все в TestSuite, затем запускает их. Таким образом, я могу отфильтровать django.contrib и включить некоторые из моих собственных unittest.TestCases, которые manage.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()
0 голосов
/ 13 июня 2010

Что ж, правильное решение таково, как сказал ученый:

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

Когда вы просто запускаете тестовую команду , будут проверяться все приложения в INSTALLED_APPS, включая приложения из contrib (такие как auth, admin, sites etc).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...