Я хочу включить тесты для моего приложения Django. После прочтения нескольких проводок о модульном тестировании против интеграции тестирования (особенно this SO posting), я не уверен по поводу следующей ситуации:Как убрать модель модели Django?
Юнит-тесты являются единственными тестами, которые говорят вам, где именно ошибка есть. Чтобы нарисовать эту информацию, они должны запустить метод в издеваемую среду, где все другие зависимости должны корректно работать.
Во время тестирования моих форм (на самом деле ModelForm
ы), я полагаюсь на Джанго feature to provide test-data by a fixture. Поэтому в моих тестах формы используются normal Способы Django, такие как Foo.objects.get()
.
Однако вышеуказанная ссылка SO posting предлагает выполнить unittests, не полагаясь на внешние компоненты. Так что я должен отказаться от светильников для unittests и использовать их только в тестах интеграции?
Вот пример моей текущей настройки тестирования для форм:
from django.test import TestCase
class FooTest(TestCase):
"""Base class for all app related tests"""
fixtures = ['testdata.json']
class BarFormTest(FooTest):
"""Tests for the BarForm"""
def test_constructor(self):
"""Tests if the form stores the supplied user"""
# this is the line I'm unsure of:
u = User.objects.get(username='TestUser01')
# is this better?
# u = User(username='TestUser01')
form = BarForm(data=None, user=u)
self.assertEqual(u, form.user)
Не поймите меня неправильно, мои тесты работают так, как ожидалось. Я просто не уверен, могу ли я полагаться на внешние (встроенные) функции Django. Они также протестированы, поэтому любая ошибка в моих тестах, скорее всего, возникнет в моем.
Должен ли я сэкономить светильники для проведения интеграционных испытаний? Надеюсь, этот вопрос не слишком широкий, я спрашиваю о лучших практиках Django.
Мне нравится эта цепочка доверия. Возможно, вы правы: вам нужно доверять некоторому коду. +1, но я оставлю этот вопрос открытым, чтобы предложить еще несколько ответов. – Mischback