Как сгруппировать модульные тесты в Django с более высокой степенью детализации, чем в приложении? - PullRequest
3 голосов
/ 28 июня 2011

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

Тем не менее, я считаю, что тестовые случаи в одном приложении обычно принадлежат отдельным логическим группам или кластерам, и часто было бы полезно иметь возможность выполнять только одну группу тестов. Представьте себе, например:

  • У меня есть несколько тестов, каждый из которых охватывает свою конфигурацию отдельной модели, и я хочу запустить все из них (и только их) при разработке модели. (Это особенно хлопотно, потому что дешевый способ сделать это - объединить тестовые наборы вместе, так что теперь у вас есть один тестовый пример, который вы можете легко запустить, но это кошмар для чтения и обслуживания).
  • У меня есть серия служебных классов, чьи тесты очень быстрые, потому что они не попадают в базу данных. Мне не нужно запускать модельные тесты и просматривать тесты при их рефакторинге.

Я искал вокруг. Но хотя относительно просто разделить ваши тесты на несколько файлов (см., Например, эти два вопроса), не представляется простым способ запустить тестовые группы отдельно. .

Итак, я что-то упустил? Что такое секретный соус для групповых тестов?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2013

Для Джанго <1,6 </strong>
Лично я делаю:

У вас есть init файл:

myapp/tests/__init__.py :

from test1 import *
from test2 import *

def suite():
    import unittest
    #import doctest # If you want to use doctest

    TEST_CASES = ( 
     'sendim.tests.test1',
     'sendim.tests.test2',
    )   
    suite = unittest.TestSuite()

    #suite.addTest(doctest.DocTestSuite(object)) # object which have doctest
    for t in TEST_CASES :
        suite.addTest(unittest.TestLoader().loadTestsFromModule(__import__(t, globals(), locals(), fromlist=["*"])))
    return suite

И, например,тестовый файл в файле с именем 'TestCase1':

myapp/tests/test1.py :

from django.utils import unittest

class TestCase1(unittest.TestCase) :
    # Your testcase

Если вы запустите ./manage.py test myapp, он будет запускать все тестовые случаи.
Иначе, если вы запустите `./manage.py test myapp.TestCase1,он выполнит только этот.

2 голосов
/ 29 июня 2011

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

В частности, вы можете пометить тесты или задать для них атрибуты.Затем запустите только подмножество тестов (для приложения или всего проекта), помеченных данным тегом или тегами.

https://nose.readthedocs.org/en/latest/plugins/attrib.html?highlight=tags

Обратите внимание, что нос расширяет unittest, поэтому вы уже существуетеПакет юнит-тестов django, скорее всего, уже работает с носовым бегунком.

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