Странность тестирования Django SQLite: другой путь выполнения? - PullRequest
5 голосов
/ 10 декабря 2010

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

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

Когда DATABASE_ENGINE установлен на использование django.db.backends.sqlite3 и я запускаю manage.py test, вывод не такой, как ожидалось:

(Удаленобольшинство строк, но они указывают на интересные точки отказа)

$ python manage.py test
Traceback (most recent call last):
  File "manage.py", line 12, in 
    execute_manager(settings)
  File "/Users/bartekc/.virtualenvs/xx/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/Users/bartekc/domains/xx/xx/associates/yy/models.py", line 51, in 
    class AcvTripIncentive(models.Model):

  # First interesting failure
  File "/Users/bartekc/domains/xx/xx/associates/yy/models.py", line 55, in AcvTripIncentive
    trip = models.OneToOneField(Trip, limit_choices_to={'sites' : Site.objects.get(name='ZZ'), 'is_active' : True,})

  # Next interesting failure
   File "/Users/bartekc/domains/xx/xx/associates/yyz/models.py", line 252, in 
    current_site = Site.objects.get_current()

Существует несколько подобных сбоев, но они просто указывают на пару.Проблема очевидна.Модель сайта не имеет фактических данных, но файлы содержат код, который пытается извлечь текущие или конкретные экземпляры в рамках модели сайта.

Теперь я могу придумать простое решение: OneToOneField должно бытьпереключился на использование функции с limit_choices_to, а вторая такая же.Затем функции вызываются при необходимости, а не при первоначальном сканировании файла Django.

Тем не менее, мой актуальный вопрос: почему это происходит с SQLite, а не с MySQL? .Есть ли разный способ обработки двумя ядрами базы данных через тесты?Я бы так не думал, так как Python выполняет всю компиляцию моделей.

Что именно здесь происходит?

Cheers.

Ответы [ 2 ]

1 голос
/ 04 января 2011

По какой причине вы не насмехаетесь доступа к базе данных?Ваша граница UT становится чрезвычайно широкой, когда вы добавляете базу данных (независимо от того, какая база данных) к смеси.Это больше похоже на интеграционный тест, чем на модульный тест.

0 голосов
/ 14 декабря 2010

Загружаете ли вы объекты своего сайта из прибора?

Если это так, возможно, вы наткнулись на известную проблему с MySQL и транзакциями. Выполните текстовый поиск для «MySQL и Fixtures» на этой странице: http://docs.djangoproject.com/en/dev/ref/django-admin/?from=olddocs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...