Правильный способ управления светильниками в Джанго - PullRequest
1 голос
/ 16 декабря 2011

сегодня у меня была дискуссия с моими коллегами о том, как мы должны управлять приборами в нашем приложении django. Мы не можем найти никакого решения, которое удовлетворило бы всех, поэтому я задаю этот вопрос здесь.

Предположим, у нас довольно большой проект django с дюжиной приложений внутри, у каждого приложения есть файл tests.py с несколькими TestClasses. Имея это, как я должен управлять тестовыми данными для всех этих приложений? С моей точки зрения, есть 2 разных способа:

  1. Храните все данные в отдельности для каждого приложения test_data.json файл. Этот файл будет содержать тестовые данные для всех моделей, определенных в файле models.py приложения, независимо от того, где используются эти данные (их можно использовать в тестах из другого приложения)
  2. Сохраните некоторые общие данные, которые, вероятно, потребуются всеми тестами (например, auth.users ) в test_data.json и данные для каждого TestCase в отдельном test_case. JSON файл.

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

1 Ответ

2 голосов
/ 17 декабря 2011

Если вы думаете о самом чистом способе определения тестовых данных для ваших тестов, я бы рекомендовал вам прочитать о django-any application :

django-любая явная замена старому стилю, большая и подверженная ошибкам файлы неявных фикстур.

django-any позволяет указать только поля, важные для теста, и заполнить отдых случайным образом с приемлемыми значениями.

Это делает тесты чистыми и их легко разобрать, не читая прибор файлы.

from django_any import any_model, WithTestDataSeed

class TestMyShop(TestCase):
    def test_order_updates_user_account(self):
        account = any_model(Account, amount=25, user__is_active=True)
        order = any_model(Order, user=account.user, amount=10)
        order.proceed()

        account = Account.objects.get(pk=account.pk)
        self.assertEquals(15, account.amount)

Такой же подход доступен и для форм (django_any.any_form)

Это решение помогает избежать сохранения дополнительных данных в вашей БД во время выполнения ваших тестов.

...