【问题标题】:Testing Hibernate DAO using Junit使用 Junit 测试 Hibernate DAO
【发布时间】:2014-06-21 06:28:28
【问题描述】:

我在我的项目中使用了 Spring 和 Hibernate 的组合,并想测试像 Save 和 Delete 这样的 DAO 方法。

daoFoundation 是在 hibernateSession 上创建的包装类。

@Override
public String createSubject(Subject subject) {
    String subjectId = (String) daoFoundation.save(subject);
    return subjectId;
}

这是我在 JUnit Runs with SpringJunit4ClassRunner 中写的
我在 SetupMethod 中创建了主题对象。

@Test
public void createSubjectTest(){
    subjectDao.createSubject(subject);
    assertNotNull(hassSubjectSelection.getId());
}

这是否足够了,还是我需要在我的测试类中写一些额外的东西?

【问题讨论】:

  • 应该提供更多TestCase类的细节,以便检查ContextConfiguration和AutoWired的用法。
  • 看看here

标签: java spring hibernate junit


【解决方案1】:

最简单的方法是导入您的 Spring 应用程序上下文,在您要测试的 DAO 中自动装配,然后将您的测试方法或整个类标记为 @Transactional。这将创建一个 Hibernate 会话,运行您的测试,然后自动回滚事务,这样您的测试就不会影响您的数据库状态。

看看如何使用 Spring here 运行单元测试。您可以让 Spring 使用 @ContextConfiguration 注释创建整个应用程序上下文。因此,如果您使用名为 database-servlet.xml 的 XML 文件创建数据库,那么您将添加注释

@ContextConfiguration(locations={"classpath:/database-servlet.xml"}) public class Test()

您可以使用注解@RunWith(SpringJUnit4ClassRunner.class) 将Spring TestContext Framework 的功能与您的单元测试一起使用。这允许您执行诸如声明应该抛出的预期异常、运行定时测试、重复测试运行 X 次以及其他一些很酷的事情。

基本上要让这个工作正常进行,您的测试类应该类似于以下内容:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={YOUR APP CONTEXT FILES HERE AS A COMMA SEPARATED LIST})
public class Test(){
    @Autowired
    private YourDAO yourDAO;

    @Test
    @Transactional
    public void testSave(){
        //Test save method here. Any database changes made here will be
        //automatically rolled back when the test finishes.
    }

让我知道这是否有效。

【讨论】:

  • 如果您的文件不在类路径中,我们还能使用它吗? @ContextConfiguration(locations={您的应用上下文文件以逗号分隔})
【解决方案2】:

测试您的 dao 层的最佳方法是使用 spring jdbctemplate 将数据写入您的数据库以测试您的 get 和 delete 方法。然后在@after 中删除你写的记录。然后使用 hibernate 写入您的数据库并使用 jdbctemplate 将它们读回。然后删除您的测试行。没有什么,你真正在做的就是测试 hibernate 的缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2017-05-28
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多