Я использую Hibernate 4.0.1.Final в автономном приложении. Базой db является MySQL 5.5. Используя JUnit 4.8.1, я тестирую свой объект доступа к данным и хочу запускать тесты, чтобы, когда мой тест JUnit заканчивается, все мои изменения откатываются назад. Есть ли элегантный способ сделать это? Прямо сейчас все совершается, что имеет смысл. Вот мой JUnit тест ...Hibernate: как откат транзакций после теста JUnit?
@Before
public void setUp() throws IOException {
final InputStream in = getClass().getClassLoader().getResourceAsStream("test.properties");
testProps = new Properties();
testProps.load(in);
final Configuration configuration = new Configuration();
configuration.configure().setProperty("hibernate.show_sql", "false");
final ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
orgDao = new OrganizationDAOImpl(sessionFactory);
} // setUp
@Test
public void testInsertSchool() {
final Organization org = new Organization();
org.setOrganizationId(testProps.getProperty("test.id"));
org.setName(testProps.getProperty("test.name"));
orgDao.saveOrUpdate(org);
final Organization foundOrg = orgDao.findById(org.getOrganizationId());
Assert.assertEquals(org, foundOrg);
}
Вот код из объекта доступа к данным ...
protected void saveOrUpdate(Object obj) {
try {
startOperation();
session.saveOrUpdate(obj);
tx.commit();
} catch (HibernateException e) {
handleException(e);
} finally {
session.close();
}
}
protected Object find(Class clazz, Serializable id) {
Object obj = null;
try {
startOperation();
obj = session.get(clazz, id);
tx.commit();
} catch (HibernateException e) {
handleException(e);
} finally {
session.close();
}
return obj;
}
Я согласен с вашей точкой зрения о разделении операций db от коммитов. Я видел, что это достигнуто на уровне сервиса. Но тогда мой же вопрос возник бы - при тестировании уровня сервиса, как бы я структурировал JUnit-тест, чтобы после выполнения операций уровня обслуживания изменения базы данных откат? – Dave
Это зависит от того, что вы пытаетесь проверить. Возможно, вы могли бы дать вашему уровню обслуживания базы данных режим имитации, а не совершать, если он находится в режиме симуляции? – hsanders