Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание DataSource для тестирования, Создание DataSource без JEE-сервера 
V
    Опции темы
Alexis
Дата 20.11.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

Репутация: 5
Всего: 5



Имеются DAO-классы к которым нужно написать тесты. Проблема в том, что используется соединение через DataSource, который поднимает Tomcat. Т. е. что-то вроде:
Код

// суперкласс класс для всех DAO-классов
public class BaseDAO {
  //...
  public Object executeQuery(String sql, /* ... */)  {
    Context initContext = new InitialContext();
    Context envContext  = (Context)initContext.lookup("java:/comp/env");
    DataSource ds = (DataSource)envContext.lookup("jdbc/MyDS");
    conn = ds.getConnection();
    // ...
  }
}

Все запросы в конечном счете обрабатываются методом executeQuery. Есть задумка сделать базовый класс для всех тест-кейсов DAO и если бы в setUp() получилось бы создать свою DataSource, то все бы получилось отлично оттестировать. Можно ли как-нибудь быстро и просто создать свою DataSource?
PM   Вверх
powerOn
Дата 20.11.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Это вам нужно "мокировать" объекты.  Посмотрите вот тут: http://www.jmock.org/. Там есть и get started и рецепты по использованию.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Alexis
Дата 20.11.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

Репутация: 5
Всего: 5



Цитата(powerOn @  20.11.2007,  23:58 Найти цитируемый пост)
Это вам нужно "мокировать" объекты.  Посмотрите вот тут: http://www.jmock.org/. Там есть и get started и рецепты по использованию. 

Спасибо за ссылку, уже скачиваю, буду разбираться.
PM   Вверх
Alexis
Дата 21.11.2007, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

Репутация: 5
Всего: 5



powerOn, 
Я так понимаю, идея в том, чтобы вынести получение DataSource в отдельный метод, написать интерфейс, а потом на тестах переопределить с помощью mocked объектов вызов метода getDataSource, чтобы он возвращал, к примеру, DataSource с одним подключением, который я ему и создаю. Т. е. подсовывать свой DataSource с помощью mocked. Как-то навороченно получается, ну да ладно попробую реализовать, если слегка подправить тестируемый код, то можно сделать даже вполне красиво.
PM   Вверх
powerOn
Дата 21.11.2007, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Да, похоже на то.

Распишу немного подробнее:
Мокирование объекта - это создание заглушки для этого объекта во время выполнения программы. Это очень полезная функция для тестирования. Ты можешь "замокать" любой абстрактный (или конкретный) класс или интерфейс и определить свое поведение методов. 

Например используешь ты Java Server Faces, написал Managed-Bean, который активно использует методы FacesContext. Задача его протестировать. Но так как FacesContext создаётся и инициализируется JSF-ом во время выполнения на сервере, то создать такой объект для теста нет возможности. Для решение такой задачи как раз подходит мокирование. Ты можешь создать объект FacesContext и переопределить поведение метода как тебе угодно (т.е. что бы покрытие было 100%).
Кстати, важно иметь set методы для мокируемого объекта в тестируемом классе, что бы иметь возможность подсунуть заглушку.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Alexis
Дата 21.11.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

Репутация: 5
Всего: 5



powerOn, спасибо, я примерно так и понял. Интересная штука, раньше о ней не слышал.
PM   Вверх
powerOn
Дата 21.11.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Пожалуйста. Если твой вопрос решён, не забывай помечать его таковым.  smile 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.