2013-03-23 12 views
8

Mam projekt django, który używał django-nose. Chciałbym dodać do projektu django-celery. Używam testów jednostkowych. Zarówno django-nos, jak i django-seler potrzebują ustawienia TEST_RUNNER w moim pliku settings.py. W szczególności:Używanie django-nose i django-selekcji razem - testowanie jednostkowe

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 

do django nosa oraz:

TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner' 

do Django selera.

Jak powinienem sobie z tym poradzić, aby móc korzystać z obu pakietów?

+0

+1 idk, może trzeba podklasy jeden i dodać funkcjonalność drugiej do własnej klasy. –

Odpowiedz

6

Stwierdziłem, że najlepszym sposobem, aby sobie z tym poradzić, jest pominięcie biegacza testowego Selera. Po prostu używam dekorowania moich testów do selera przy pomocy @override_settings(CELERY_ALWAYS_EAGER=True) i wszystko ładnie się sprawdza.

4

Jeśli jesteś w stanie wyizolować swoje testy do zależnego selera i non-selera funkcjonalności, można spróbować overriding settings na zajęciach testowych, które powołują zadania seler:

from django.test.utils import override_settings 

@override_settings(TEST_RUNNER='djcelery.contrib.test_runner.CeleryTestSuiteRunner') 
class AsyncTestCase(TestCase): 
    def test_async(self): 
     self.assertEquals(add.delay(4,4), 8) 

natomiast NoseTestRunner zostanie ustawiona jako domyślnie w ustawieniach.py ​​

+0

Dzięki - przyjrzę się temu podejściu. – Erik

1

Możesz podklasować biegacz selera i biegacz Nosa, a następnie uzyskać dobre strony dla nich wszystkich.

from django_nose import NoseTestSuiteRunner 
from djcelery.contrib.test_runner import CeleryTestSuiteRunner 

class TestRunner(CeleryTestSuiteRunner, NoseTestSuiteRunner): 
    pass 

Następnie w ustawieniach:

TEST_RUNNER = '<package to>.TestRunner' 

Dlaczego to działa:

help(TestRunner) 

Otrzymasz:

| Method resolution order: 
|  TestRunner 
|  djcelery.contrib.test_runner.CeleryTestSuiteRunner 
|  django_nose.runner.NoseTestSuiteRunner 
|  django_nose.runner.BasicNoseRunner 
|  django_nose.runner.BaseRunner 
|  django.test.runner.DiscoverRunner 
|  builtins.object 

CeleryTestRunner testu nie zrobił nic, po prostu ustawienie jakiś config i następnie zadzwoń pod numer super().setup_test_environment(). Wtedy super będzie szukał setup_test_environment() w tym łańcuchu.

Zobacz wideo z Raymonda Hettingera: super uważane za super (here).

Powiązane problemy