1

Я хочу включить тесты для моего приложения 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.

ответ

0

Это зависит от того, насколько вы уверены, что вы можете доверять своим unittests.

Если вы не доверяете внутренним функциям django, вам не следует использовать django, но вместо этого используйте чистый питон во всем проекте. Если вы не доверяете внутренним функциям python, вы не должны использовать python, но C. Если вы не доверяете C, вы должны использовать ассемблер. ...

В django есть встроенные средства, которые гарантируют, что каждый релиз работает так, как ожидалось. Таким образом, вы можете быть в безопасности, что ORM работает так, как ожидалось.

+0

Мне нравится эта цепочка доверия. Возможно, вы правы: вам нужно доверять некоторому коду. +1, но я оставлю этот вопрос открытым, чтобы предложить еще несколько ответов. – Mischback

Смежные вопросы