2015-07-09 1 views
2

Я действительно наслаждался удобством setUpTestData и --keepdb в Django 1.8!Django: Сохранение setUpTestData DRY

Однако я столкнулся с проблемой хранения данных, совместимой с несколькими тестовыми файлами. Я хотел бы, чтобы мой метод setUpTestData был в одном месте, и каждый из моих тестовых файлов ссылается на него, так что мне не нужно копировать/вставлять изменения в каждый отдельный тестовый файл.

Я немного смущен о том, как это сделать, особенно в отношении метода класса, который, кажется, мешает мне импортировать мою функцию setUpTestData из другого файла. Кто-нибудь может мне помочь? Спасибо, вперед!

Текущий тестовый файл

from django.test import TestCase 
from models import SpecificModel 

class TestData(TestCase): 

    @classmethod 
    def setUpTestData(cls): 
     cls.test_item = SpecificModel.objects.create(data="some data") 

SetupData файл

??? 
+0

эти вопросы немного сбивает с толку, что я думаю, что именно поэтому он не ответил. Можете ли вы просто подклассифицировать TestData в других файлах, чтобы получить 'setUpTestData'? –

+0

Вот с чем мне нужна помощь. Я занимался этим около 45 минут, но я не знаю, как разместить @classmethod, чтобы заставить его работать правильно. –

+0

Ну, я поиграл с ним немного больше и получил это на этот раз. Я думаю, что моя проблема заключалась в том, что я пытался передать «я» в качестве аргумента, а не «cls». Спасибо, что указал мне в правильном направлении! –

ответ

3

Вы можете просто унаследовать класс Testdata который объявляет метод?

base_tests.py

from django.test import TestCase 
from models import SpecificModel 

class TestData(TestCase): 

    @classmethod 
    def setUpTestData(cls): 
     cls.test_item = SpecificModel.objects.create(data="some data") 

specific_tests.py

from .base_tests import TestData 

class SubclassOfTestData(TestData): 
    # Inherits `setUpTestData` 
    pass 
+0

Это намного проще, чем то, что я делаю .. Спасибо, что нашли время, чтобы помочь! –

+0

Это приятное решение, и оно работает, когда у вас есть только один подкласс TestData. имеют два разных класса, которые наследуются от TestData, тогда база данных не кажется разрушенной между тестами в двух разных классах. Это приводит к тому, что setUpTestData вызывается дважды в базе данных, которая не является тем, что ожидалось бы (по крайней мере, я). – KlausCPH