Итак, после отладки этой проблемы я обнаружил, что из-за символа новой строки в конце модель предполагала, что в моих входных данных есть 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 входа разделены этой новой строкой характер и, что более важно, в конце нет символа новой строки
Для [1 113] pytest пользователи.
самая большая проблема:
override_settings
не работает с pytest. 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)
С подклассом 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? Если это «что-то еще» вызвано вашей программой тестирования, то я не уверен, что любое количество обезьяньих исправлений спасет тест, не аннулируя достоверность самих тестов.
Обнаружил это при попытке исправить некоторые доктесты ... Для полноты я хочу упомянуть, что если вы собираетесь изменить настройки при использовании доктестов, вам следует сделать это перед импортом чего-либо еще. ..
>>> from django.conf import settings
>>> settings.SOME_SETTING = 20
>>> # Your other imports
>>> from django.core.paginator import Paginator
>>> # etc
Обновление : приведенное ниже решение необходимо только в 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()