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