После прихода из мира Ruby у меня возникли небольшие проблемы с выполнением TDD на Java.Самая большая проблема возникает, когда у меня есть приложение, которое просто взаимодействует с внешним API.
Скажем, я хочу просто получить некоторые данные из Календаря Google или 5 твитов от какого-то пользователя Twitter и отобразить его.
В Ruby у меня нет никаких проблем, потому что Я могу напрямую подключить библиотеку API в тестах , но у меня нет такой опции в Java.
Если я думаю об этом с точки зрения MVC, мои объекты модели напрямую обращаются к API через некоторую библиотеку.Вопрос в том, это плохой дизайн?Должен ли я всегда оборачивать какую-либо библиотеку API в какой-либо интерфейс, чтобы я мог смоделировать / заглушить ее в Java?
Потому что, когда я думаю об этом, единственной целью этого интерфейса будет имитировать (пожалуйста, не убивайте меня за это) обезьяна-патч. Это означает, что каждый раз, когда я использую какой-либо внешний ресурс, я должен обернуть каждый слой в интерфейс, который можно удалить.
# do I have to abstract everything just to do this in Java?
Twitter.stub!(:search)
Теперь вы можете сказать, что я всегда должен абстрагироваться от интерфейса, чтобы я мог изменить нижележащий слой на что-нибудь еще.Но если я пишу твиттер-приложение, я не собираюсь менять его на RSS-ридер.
Да, я могу добавить, например, Facebook, и тогда будет разумно иметь интерфейс.Но когда нет другого ресурса, который мог бы заменить тот, который я использую, я все равно должен обернуть все в интерфейсах, чтобы сделать его тестируемым.
Я что-то упустил, или этопросто способ тестирования в мире Java?