Hibernate:事务性插入和单元测试

时间:2013-07-13 13:42:08

标签: java spring hibernate junit

我正在为DAO调用编写单元测试,以便使用Hibernate将记录插入到数据库中。

这是交易性的,我以这种方式使用了@Transactional:

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations={"/spring-servlet.xml"})
@Transactional
public class MyDaoTest {

    @Autowired
    private MyDao dao;

    @Test
    @Rollback(false)
    public void testAddEmployee() {


        // Create some data (line 1)

        dao.addPerson(newPerson); // (line 2)

        // Query DB (line 3)

        // Check result (line 4)
    } // (line 5)
}

在上面的代码中,只有在函数终止于第5行时才会提交操作。

事实是,在第3和第4行,我需要查询数据库,以检查是否已成功完成工作。但我不能这样做,因为我的数据仍未保留。

我可以做些什么来测试这个插页?有没有办法在函数结束之前提交?

我在这里添加更多信息。这是控制台输出:

Hibernate: select person0_.ID as ID1_, person0_.NAME as NAME1_ from PERSON person0_
Hibernate: insert into PERSON (NAME) values (?, ?)
Hibernate: select person0_.ID as ID1_, person0_.NAME as NAME1_ from PERSON person0_

测试我正在使用JUnit

1 个答案:

答案 0 :(得分:1)

为了测试插入,您可以使用以下断言:

Assert.assertNotNull(dao.findById(newPerson.getId()));

对于删除检查,您可以尝试以下测试:

@Test
public void testDelete(){
    ...
    dao.removePerson(person);
    Assert.assertNull(dao.findById(person.getId()));
}