Я собираюсь приступить к некоторым крупным проектам App Engine на основе Python, и я думаю, что перед тем, как перейти к стратегии тестирования модулей, я должен проверить "Премудрость толпы" Stack Overflow. У меня есть существующая инфраструктура модульного тестирования (основанная на unittest с пользовательскими бегунами и расширениями), которые я хочу использовать, поэтому все "weight" / "intrusive", например nose, webtest, или gaeunit, не кажется подходящим. Важнейшие модульные тесты в моем мировоззрении чрезвычайно легкие и быстрые, те, которые работают в очень короткое время, поэтому я могу постоянно их запускать, не нарушая ритм развития (например, для другого проекта, я получаю 97% или около того охват проекта 20K-линий с несколькими десятками сверхбыстрых тестов, которые занимают 5-7 секунд, истекшее время, для типичного запуска, в целом - то, что я считаю достойным набором небольших, тесты). Разумеется, у меня будут более богатые и тяжелые тесты, вплоть до интеграционных тестов с селеном или ветряной мельницей, что не, о чем я прошу;-) - мое внимание в этом вопросе ( и в большинстве моих усилий по развитию;-) находится на небольших, легких модульных тестах, которые легко и очень быстро охватывают мой код, а не на более глубоких.
Итак, я думаю, что мне нужно, по сути, набор небольших, очень легких симуляций различных подсистем подсистемы App Engine - хранилищ данных, memcache, объектов запроса/ответа и вызовов для обработчиков webapp, обработки пользователей, почты и c, примерно в этом порядке приоритета. Я не нашел точно, что я ищу, поэтому мне кажется, что я должен либо полагаться на mox, часто выполняли в прошлом, что в основном означает насмехание каждой подсистемы, используемой в данном тесте, и создание всех ожиданий & c (сильный, но много работы каждый раз и очень чувствительный к внутренним компонентам тестируемого кода, то есть очень "белый" -box "y) или катить мое собственное моделирование каждой подсистемы (и делать утверждения в состояниях смоделированных подсистем как часть единичных тестов). Резервы кажутся осуществимыми, учитывая сильную архитектуру" заглушек "GAE Python, но я не могу поверить, что мне нужно сворачивать свои собственные, т.е. Что никто уже не написал таких простейших симуляторов!) Например, для хранилища данных, похоже, что мне нужна более или менее" заглушка в хранилище данных ", которая уже входит в состав SDK, а также способ отметить ее только для чтения и простых в использовании аксессуаров для утверждений о состоянии хранилища данных; и т.д., подсистема подсистемой - каждая, по-видимому, нужна" чуть больше ", чем то, что уже в SDK," взгромоздилось поверх "существующей архитектуры" заглушек".
Итак, перед тем, как погрузиться и потратить день или два драгоценного времени разработки, "сворачивая мои собственные" симуляции подсистем GAE для целей единичного тестирования, я подумал, что я дважды проверю с толпой SO и посмотрю, что вы думаете из этого... или, если уже существует какой-то существующий набор с открытым исходным кодом таких симуляторов, который я могу просто повторно использовать (или минимально настроить... -), и который я просто не обнаружил при поиске! -)
Изменить: уточнить, если я действительно откажусь от своего собственного, я планирую использовать поставляемые SDK заглушки, где это возможно; но, например, там нет заглушки для хранилища данных, которое изначально считывается из файла, но затем не сохраняется в конце, поэтому мне нужно подклассировать и настроить существующий (что также не предлагает особенно удобные способы делать утверждения на его состояние - то же самое для заглушки почтовой службы и т.д.). Это то, что я имею в виду под "прокатки собственного", а не "переписывания с нуля"! -)
Изменить: "почему бы не GAEUnit" - GAEUnit хорош для собственных случаев использования, но запуск dev_appserver и просмотр результатов в моем браузере (или даже через urllib.urlopen) определенно не то, что я После этого я хочу использовать полностью автоматизированную настройку, подходящую для работы в рамках существующей тестовой среды, основанной на расширении unittest и отсутствии HTTP на пути (указанная среда определяет "быстрый" тест как один из другая вещь не имеет сокетов и минимального дискового ввода-вывода - мы имитируем или издеваемся над ними - поэтому через gaeunit я мог бы сделать не лучше, чем "средние" тесты) + нет удобного способа предварительного заполнения хранилища данных для каждого теста (и никакой структуры OO для помогите настроить вещи).