1

我正在为 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

4

1 回答 1

1

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

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

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

@Test
public void testDelete(){
    ...
    dao.removePerson(person);
    Assert.assertNull(dao.findById(person.getId()));
}
于 2013-07-14T10:02:45.953 回答