Когда я использую Fixture с SqlAlchemy в своих модульных тестах, почему я не могу подтвердить изменения в базе данных во время теста? - PullRequest
0 голосов
/ 03 апреля 2012

Я тестирую обработчик сообщений, который использует SqlAlchemy (v0.7.4).В моем тесте я использую Fixture (v1.4) с Sqlite для настройки и уничтожения временной базы данных.Мои данные прибора включают в себя таблицу файлов с полем состояния, которое должно обновляться при запуске процессора.

Я подтвердил, что тест, тестируемый процессор и прибор совместно используют один и тот же сеанс базы данных.

Я запрашиваю поле состояния в записи файла перед запуском процессора и после него.Значение должно измениться (от int, представляющего «Processing» до «Complete»).Я добавил отладочный код в процессор, чтобы убедиться, что поле обновляется с правильным новым значением состояния.Я также могу независимо проверить, что процессор работает успешно, проверив содержимое выходного файла, который он производит.Однако, когда я запрашиваю состояние в конце моего теста, используя сеанс базы данных моего теста, оно всегда совпадает со значением в начале.

Я пытался явно зафиксировать и очистить сеанс до окончательного статусазапрос.Ничего не работаетЕсть идеи?

1 Ответ

3 голосов
/ 04 апреля 2012

Проблема здесь была двоякой: 1) Мой тест использовал временную базу данных Sqlite в памяти. 2) В моем функциональном тесте процессор порождался в новом процессе.

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

Решение: настроить временную базу данных Sqlite в файле, а не в памяти .

Кроме того, я обнаружил, что, когда Fixture завершает работу, он выдаст ошибку, если данные вашего прибора не находятся в том же состоянии, в котором они были настроены (отмечено в конце этого раздела ). Но это был отдельный вопрос.

...