Как к Модульному тесту с различными настройками в Django?

Итак, после отладки этой проблемы я обнаружил, что из-за символа новой строки в конце модель предполагала, что в моих входных данных есть 2 строки, но есть только одна. Отсюда и ошибка. Поэтому я просто изменил строку на: «1533071820,0.05619,0.05619,0.05611,0.05611,0.006076». И если я анализирую более одной полезной нагрузки (пакета), это: «1533071820,0.05619,0.05619,0.05611,0.05611,0.006076 \ n1533071820,0.05619,0.05619,0.05611,0.05611,0.006076», где мои 2 входа разделены этой новой строкой характер и, что более важно, в конце нет символа новой строки

103
задан Soviut 22 December 2009 в 06:51
поделиться

4 ответа

Для [1 113] pytest пользователи.

самая большая проблема:

  • override_settings не работает с pytest.
  • Разделение на подклассы Django TestCase заставит его работать, но затем Вы не можете использовать pytest приспособления.

решение состоит в том, чтобы использовать settings, приспособление зарегистрировало здесь .

Пример

def test_with_specific_settings(settings):
    settings.DEBUG = False
    settings.MIDDLEWARE = []
    ..

И в случае, если необходимо обновить несколько полей

def override_settings(settings, kwargs):
    for k, v in kwargs.items():
        setattr(settings, k, v)


new_settings = dict(
    DEBUG=True,
    INSTALLED_APPS=[],
)


def test_with_specific_settings(settings):
    override_settings(settings, new_settings)
0
ответ дан 24 November 2019 в 04:16
поделиться

С подклассом UnitTest можно делать все, что угодно, включая настройку и чтение свойств экземпляра:

from django.conf import settings

class MyTest(unittest.TestCase):
   def setUp(self):
       self.old_setting = settings.NUM_LATEST
       settings.NUM_LATEST = 5 # value tested against in the TestCase

   def tearDown(self):
       settings.NUM_LATEST = self.old_setting

Поскольку тестовые примеры django выполняются в однопоточном режиме, я Мне интересно, что еще может изменять значение NUM_LATEST? Если это «что-то еще» вызвано вашей программой тестирования, то я не уверен, что любое количество обезьяньих исправлений спасет тест, не аннулируя достоверность самих тестов.

43
ответ дан 24 November 2019 в 04:16
поделиться

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

>>> from django.conf import settings

>>> settings.SOME_SETTING = 20

>>> # Your other imports
>>> from django.core.paginator import Paginator
>>> # etc
3
ответ дан 24 November 2019 в 04:16
поделиться

Обновление : приведенное ниже решение необходимо только в Django 1.3.x и ранее. Для> 1.4 см. ответ slinkp .

Если вы часто меняете настройки в своих тестах и ​​используете Python ≥2.5, это тоже удобно:

from contextlib import contextmanager

class SettingDoesNotExist:
    pass

@contextmanager
def patch_settings(**kwargs):
    from django.conf import settings
    old_settings = []
    for key, new_value in kwargs.items():
        old_value = getattr(settings, key, SettingDoesNotExist)
        old_settings.append((key, old_value))
        setattr(settings, key, new_value)
    yield
    for key, old_value in old_settings:
        if old_value is SettingDoesNotExist:
            delattr(settings, key)
        else:
            setattr(settings, key, old_value)

Тогда вы можете сделать:

with patch_settings(MY_SETTING='my value', OTHER_SETTING='other value'):
    do_my_tests()
20
ответ дан 24 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: