Создайте отдельный класс или модуль, отвечающий за связь с вашими внешними каналами.
Сделать этот класс способным быть двойным тестом . Вы используете Python, так что вы там довольно золотые; если бы вы использовали C #, я бы предложил использовать интерфейсные или виртуальные методы.
В своем модульном тесте вставьте двойной тест внешнего класса подачи. Проверьте, правильно ли ваш код использует класс, предполагая, что класс выполняет работу с вашими внешними ресурсами правильно. Сделайте так, чтобы ваш тест дважды возвращал фальшивые данные, а не живые данные; протестировать различные комбинации данных и, конечно, возможные исключения urllib2.
А ... вот и все.
Вы не можете эффективно автоматизировать модульные тесты, основанные на внешних источниках, поэтому лучше всего не делать этого . Запустите случайный интеграционный тест на вашем коммуникационном модуле, но не включайте эти тесты в свои автоматические тесты.
Редактировать:
Просто заметка о разнице между моим ответом и ответом @ Crast. И то, и другое по сути правильно, но они предполагают разные подходы. В подходе Crast вы используете тестовый дубль на самой библиотеке. В моем подходе вы абстрагируете использование библиотеки в отдельный модуль и тестируете двойной модуль.
Какой подход вы используете, является полностью субъективным; там нет "правильного" ответа. Я предпочитаю свой подход, потому что он позволяет мне создавать более модульный, гибкий код, что я ценю. Но это обходится дорого с точки зрения написания дополнительного кода, что не может быть оценено во многих гибких ситуациях.
Мне интересно, есть ли место, где мы могли бы объединить знания из опыта
Для этого подходят различные группы Google, хотя я не знаю, применимы ли какие-либо непосредственно к Java-GAE тем не менее - мой опыт GAE пока полностью основан на Python (я с гордостью могу сказать, что Гвидо ван Россум, изобретатель Python и теперь работающий в Google над App Engine, сказал мне, что я научил его нескольким вещам о том, как его Его детище сработало - в его рекомендации упоминается, что это то, чем я горжусь больше всего среди всех тех, что есть в моем профиле linkedin ;-). [Я работаю в Google, но мое влияние на App Engine было весьма периферийным - я работал над «построением облака», SW управления кластером и сетью, а App Engine призван сделать эту инфраструктуру полезной для сторонних разработчиков]
. действительно много эссе и презентации о том, как лучше всего денормализовать и сегментировать данные для оптимального масштабирования и производительности GAE - хотя они разного качества. Книги, которые пока вышли, так себе; в ближайшие несколько месяцев появится гораздо больше, надеюсь, лучшие (у меня был проект по написанию одного из них с двумя очень опытными друзьями, но мы все так заняты, что в итоге отказались от него). В общем, я бы порекомендовал видео Google I / O и эссе, которые Google благословил на своем сайте движка приложений и в блогах, ПЛЮС каждый бит контента из блога appenginefan - что Гвидо похвалил меня за то, что я его научил о GAE я, в свою очередь, в основном узнал от appenginefan (отчасти благодаря замечательной встрече разработчиков приложений в Пало-Альто, но и его блог тоже великолепен; -).
в ближайшие несколько месяцев появится гораздо больше, надеюсь, лучшие (у меня был проект по написанию одного из них с двумя очень опытными друзьями, но мы все так заняты, что в итоге отказались от него). В общем, я бы порекомендовал видео Google I / O и эссе, которые Google благословил на своем сайте движка приложений и в блогах, ПЛЮС каждый бит контента из блога appenginefan - что Гвидо похвалил меня за то, что я его научил о GAE я, в свою очередь, в основном узнал от appenginefan (отчасти благодаря замечательной встрече разработчиков приложений в Пало-Альто, но и его блог тоже великолепен; -). в ближайшие несколько месяцев появится гораздо больше, надеюсь, лучшие (у меня был проект по написанию одного из них с двумя очень опытными друзьями, но мы все так заняты, что в итоге отказались от него). В общем, я бы порекомендовал видео Google I / O и эссе, которые Google благословил на своем сайте движка приложений и в блогах, ПЛЮС каждый бит контента из блога appenginefan - что Гвидо похвалил меня за то, что я его научил о GAE я, в свою очередь, в основном узнал от appenginefan (отчасти благодаря замечательной встрече разработчиков приложений в Пало-Альто, но и его блог тоже великолепен; -).Таймауты жесткие, производительность была в порядке, но невысока, поэтому я обнаружил, что использую дополнительное пространство для экономии времени; например, у меня была связь «многие ко многим» между коллекционными картами и игроками, поэтому я продублировал информацию о том, кто чем владеет: у объектов Card есть список игроков, а у объектов Player есть список карт.
Обычно хранятся все ваши информация дважды была бы глупой (и склонной к рассинхронизации), но она работала очень хорошо.
В Python недавно был выпущен удаленный API, так что вы можете получить интерактивную оболочку для хранилища данных, чтобы вы могли играть со своим хранилищем данных без любые тайм-ауты или ограничения (например, вы можете удалить большие объемы данных или провести рефакторинг своих моделей); это фантастически полезно, поскольку в противном случае, как сказал Жюльен, было бы очень сложно выполнять какие-либо массовые операции.
Я поигрался с Google App Engine для Java и обнаружил, что у него много недостатков:
Это не хостинг Java-приложений общего назначения. В частности, у вас нет доступа к полной JRE (например, вы не можете создавать потоки и т. Д.). Учитывая этот факт, вам в значительной степени придется создавать свое приложение с нуля с учетом JRE Google App Engine. Перенос любого нетривиального приложения был бы невозможен.
Более уместно для ваших вопросов о хранилище данных ...
Производительность хранилища данных ужасна. Я пытался записывать 5000 наблюдений за погодой в час - ничего особенного, - но я не мог этого сделать, потому что у меня продолжалось исключение тайм-аута как с хранилищем данных, так и с HTTP-запросом. Использование "низкоуровневого" API хранилища данных несколько помогло, но недостаточно.
Я хотел удалить эти наблюдения за погодой через 24 часа, чтобы не заполнить свою квоту. Опять же, не удалось, потому что операция удаления заняла слишком много времени. Эта проблема, в свою очередь, привела к переполнению моей квоты хранилища данных. Безумно, вы не можете легко удалить большие массивы данных в хранилище данных GAE.
Есть некоторые функции, которые мне действительно понравились. Интеграция с Eclipse великолепна. Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.
В общем, мне постоянно приходилось брить яка , чтобы делать что-то, что было бы довольно тривиально на любом обычном хостинге Java / приложений. окружающая среда.
Эта проблема, в свою очередь, привела к переполнению моей квоты хранилища данных. Безумно, вы не можете легко удалить большие массивы данных в хранилище данных GAE.Есть некоторые функции, которые мне действительно понравились. Интеграция с Eclipse великолепна. Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.
В общем, мне постоянно приходилось брить яка , чтобы делать что-то, что было бы довольно тривиально на любом обычном хостинге Java / приложений. окружающая среда.
Эта проблема, в свою очередь, привела к переполнению моей квоты хранилища данных. Безумно, вы не можете легко удалить большие массивы данных в хранилище данных GAE.Есть некоторые функции, которые мне действительно понравились. Интеграция с Eclipse великолепна. Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.
В общем, мне постоянно приходилось брить яка , чтобы делать что-то, что было бы довольно тривиально на любом обычном хостинге Java / приложений. окружающая среда.
Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.В общем, мне постоянно приходилось брить яка , чтобы делать что-то, что было бы довольно тривиально на любом обычном хостинге Java / приложений. окружающая среда.
Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.В общем, мне постоянно приходилось брить яка , чтобы делать что-то, что было бы довольно тривиально на любом обычном хостинге Java / приложений. окружающая среда.
Дизайн нереляционной базы данных по существу включает денормализацию везде, где это возможно.
Пример: Поскольку BigTable не предоставляет достаточно функций агрегирования, вариант суммы (наличные), который был бы в мире СУБД, не доступный. Вместо этого он должен быть сохранен в модели, а метод сохранения модели должен быть переопределен для вычисления денормализованной суммы полей.
Существенный базовый дизайн, который приходит на ум, заключается в том, что каждый шаблон имеет свою собственную модель, в которой должны быть все необходимые поля. заполненные представлены денормализованными в соответствующей модели; и у вас есть полная сложность сигналов-обновлений-ботов, происходящих в моделях.