Как различить классы моделей между webapp и unittest - PullRequest
1 голос
/ 30 ноября 2010

Я начал смотреть на unittest при использовании Google App Engine. И это кажется немного сложным из того, что я прочитал. Поскольку вы не можете (и не должны) запускать тесты для хранилища данных.

Я написал абстрактный класс для эмуляции класса модели хранилища данных. И это довольно неплохо работает, возвращая макетные данные о get, all, fetch и т. Д. (Пробовал только в небольшом масштабе), возвращая результаты, похожие на dbModel.

Единственное, что я не нашел решения, которое меня устраивает, это то, как определить, какой класс модели использовать. Я хочу использовать макеты для модульных тестов и фактическую модель db.Model, когда работает веб-приложение.

Мое текущее решение выглядит так в моем .py, содержащем все db.Models:

if 'SERVER_SOFTWARE' in os.environ:
    class dbTest(db.Model):
        content = db.StringProperty()
        comments = db.ListProperty(str)
else:
    class dbTest(Abstract):
        content = 'Test'
        comments = ['test1', 'test2']

И кажется, что он может сломаться в любую минуту. Это путь, или можно объединить их как один класс, и если db.Model вызывается правильно, то использовать другой макет?

Ответы [ 4 ]

2 голосов
/ 01 декабря 2010

Поскольку вы не можете (и не должны) запускать тесты для хранилища данных.

Это не так.Вы можете и должны использовать локальную реализацию хранилища данных в качестве тестовой системы - нет причин тратить свое время на создание насмешек для каждого поведения хранилища данных.Вы можете использовать такой инструмент, как noseGAE или gaeunit, как предложено другими авторами, но если вы хотите настроить его самостоятельно, см. этот фрагмент .

2 голосов
/ 30 ноября 2010

Выезд gaetestbed ( документы ). Он заглушает хранилище данных (и все другие сервисы, такие как memcache) и делает тестирование из командной строки очень простым. Он обеспечивает чистоту окружающей среды перед каждым испытанием.

Лично я считаю, что это лучше, чем другие решения, которые я видел.

2 голосов
/ 30 ноября 2010

Вместо того, чтобы возиться с вашим models.py, я бы выбрал gaeunit .

Я успешно использовал его в нескольких проектах, и мне нравятся следующие функции:

  1. Всего один файл для добавления в ваш проект (gaeunit.py), и вы почти закончили
  2. Gaeunit изолирует тестовое хранилище данных от хранилища разработки (т. Е. Тесты не загрязняют вашу базу данных разработки)
1 голос
/ 30 ноября 2010

Здесь вы пытаетесь решить более одной проблемы ...

Во-первых, для запуска тестов с эмуляцией GAE вы можете взглянуть на gaeunit , который мне нравится больше всего.,Если вы не хотите запускать их из браузера, посмотрите на noseGAE (часть nose ).Это должно дать вам тестирование командной строки.

Во-вторых, в отношении вашего комментария о «создании накладных расходов на зависимости» звучит так, как будто вы ищете хорошую платформу для модульного тестирования и макетов.Это позволит вам смоделировать базу данных для тестов, которые не нужно ее проверять.Попробуйте mox и mockito для python .

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