| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Создание DataSource для тестирования |
| Автор: Alexis 20.11.2007, 22:04 | ||
Имеются DAO-классы к которым нужно написать тесты. Проблема в том, что используется соединение через DataSource, который поднимает Tomcat. Т. е. что-то вроде:
Все запросы в конечном счете обрабатываются методом executeQuery. Есть задумка сделать базовый класс для всех тест-кейсов DAO и если бы в setUp() получилось бы создать свою DataSource, то все бы получилось отлично оттестировать. Можно ли как-нибудь быстро и просто создать свою DataSource? |
| Автор: powerOn 20.11.2007, 22:58 |
| Это вам нужно "мокировать" объекты. Посмотрите вот тут: http://www.jmock.org/. Там есть и get started и рецепты по использованию. |
| Автор: Alexis 21.11.2007, 01:50 |
| powerOn, Я так понимаю, идея в том, чтобы вынести получение DataSource в отдельный метод, написать интерфейс, а потом на тестах переопределить с помощью mocked объектов вызов метода getDataSource, чтобы он возвращал, к примеру, DataSource с одним подключением, который я ему и создаю. Т. е. подсовывать свой DataSource с помощью mocked. Как-то навороченно получается, ну да ладно попробую реализовать, если слегка подправить тестируемый код, то можно сделать даже вполне красиво. |
| Автор: powerOn 21.11.2007, 02:07 |
| Да, похоже на то. Распишу немного подробнее: Мокирование объекта - это создание заглушки для этого объекта во время выполнения программы. Это очень полезная функция для тестирования. Ты можешь "замокать" любой абстрактный (или конкретный) класс или интерфейс и определить свое поведение методов. Например используешь ты Java Server Faces, написал Managed-Bean, который активно использует методы FacesContext. Задача его протестировать. Но так как FacesContext создаётся и инициализируется JSF-ом во время выполнения на сервере, то создать такой объект для теста нет возможности. Для решение такой задачи как раз подходит мокирование. Ты можешь создать объект FacesContext и переопределить поведение метода как тебе угодно (т.е. что бы покрытие было 100%). Кстати, важно иметь set методы для мокируемого объекта в тестируемом классе, что бы иметь возможность подсунуть заглушку. |
| Автор: Alexis 21.11.2007, 12:00 |
| powerOn, спасибо, я примерно так и понял. Интересная штука, раньше о ней не слышал. |
| Автор: powerOn 21.11.2007, 12:58 |
| Пожалуйста. Если твой вопрос решён, не забывай помечать его таковым. |