Мы используем MyBatis (3.0.5) в качестве инструмента or-mapping (и я не имею права говорить об этом!).
Я создал объект Response
что через MyBatis отображается на нашу таблицу базы данных [responses]
(мы используем PostgreSQL).
На самом деле используемая нами структура отображения выглядит следующим образом:
- ResponseMapper.xml - это файл XML, в котором запросы PSQL определены и сопоставлены с классом ResponseMapper.java ** и его методами
- ReponseMapper.java - интерфейс, используемый MyBatisдля выполнения запросов, определенных в файле XML (см. выше)
- ResponseDAO.java - интерфейс, используемый для целей DI (мы используем Spring)
- ResponseDAOImpl.java - конкретная реализация
ResponseDAO
, которая фактически вызывает ResponseMapper
методы;мы используем Spring для внедрения экземпляров этого класса в наше приложение
Итак, чтобы вставить новую запись [responses]
в PostgreSQL, код выглядит так из вызывающего компонента:
@Autowired
private ResponseDAO response;
public void doStuff()
{
int action = getAction();
response.setAction(action);
response.insert();
}
Эта установка прекрасно работает для нас.Однако сейчас я пытаюсь написать набор тестов JUnit для класса ResponseDAOImpl
и хочу убедиться, что он правильно выполняет запросы к нашей базе данных PostgreSQL.
Насколько я могу судить,нет способа "издеваться" над всей базой данных.Так что мой единственный вариант (на первый взгляд) - это чтобы тестовые методы выполнили запрос, проверили его успешность и затем откатили его независимо.
MyBatis, похоже, не поддерживает такую функцию отката.Я нашел эту запись из списка рассылки mybatis-user
на Old Nabble, но постер использовал Guice, и его / ее вопрос, казалось, был больше о возврате транзакций через Guice.
ЕслиMyBatis не не поддерживает транзакции / откаты ( делает это?!?! ), тогда, похоже, мое единственное повторное получение будет, если драйвер PostgreSQL-JDBC поддерживает их.Я думаю, я мог бы тогда попытаться настроить мои методы тестирования так, чтобы они запускали метод ResponseDAO.insert()
, а затем вручную попытаться откатить транзакцию напрямую через драйвер (sans MyBatis).
Имеет ли SOлюбой опыт с этим? образцы кода?Подсказки?Лучшие практики?Заранее спасибо!