700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > dbunit java_Java – 让DbUnit使用Hibernate事务

dbunit java_Java – 让DbUnit使用Hibernate事务

时间:2023-09-29 18:29:26

相关推荐

dbunit java_Java  – 让DbUnit使用Hibernate事务

我在尝试将Hibernate事务中的更改推送到数据库以使DbUnit在我的测试用例中正常工作时遇到问题.似乎DbUnit没有看到Hibernate所做的更改,因为它们还没有在事务结束时提交……而且我不确定如何重构我的测试用例以使其工作.

这是我过度简化的测试用例来证明我的问题: –

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = {

"classpath:applicationContext-test.xml"

})

@TransactionConfiguration(transactionManager = "transactionManager")

@Transactional

public class SomeTest {

@Autowired

protected DataSource dataSource;

@Autowired

private SessionFactory sessionFactory;

@Test

public void testThis() throws Exception {

Session session = sessionFactory.getCurrentSession();

assertEquals("initial overlayType count",4,session.createQuery("from OverlayType").list().size());

//-----------

// Imagine this block is an API call,ex: someService.save("AAA");

// But for the sake of simplicity,I do it this way

OverlayType overlayType = new OverlayType();

overlayType.setName("AAA");

session.save(overlayType);

//-----------

// flush has no effect here

session.flush();

assertEquals("new overlayType count",5,session.createQuery("from OverlayType").list().size());

// pull the data from database using dbunit

IDatabaseConnection connection = new DatabaseConnection(dataSource.getConnection());

connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,new MysqLDataTypeFactory());

QueryDataSet partialDataSet = new QueryDataSet(connection);

partialDataSet.addTable("resultSet","select * from overlayType");

ITable actualTable = partialDataSet.getTable("resultSet");

// FAIL: Actual row count is 4 instead of 5

assertEquals("dbunit's overlayType count",actualTable.getRowCount());

DataSourceUtils.releaseConnection(connection.getConnection(),dataSource);

}

}

我使用DbUnit的全部想法是: –

>调用someService.save(…)将数据保存到多个表中.

>使用DbUnit从XML获取预期的表.

>使用DbUnit从数据库中获取实际表.

> Dosertion.assertEquals(expectedTable,actualTable);.

但是,在这一点上,我无法让DbUnit看到Hibernate在事务中所做的更改.

我应该如何改变以使DbUnit与Hibernate事务很好地协作?

谢谢.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。