【问题标题】:Junit to test Spring service and DAO layerJunit测试Spring服务和DAO层
【发布时间】:2012-01-25 22:57:21
【问题描述】:

我正在开发一个 Spring 应用程序 (Spring 3.0) 并遵循分层架构,即Controller -> Service -> DAO layers

我想使用 Junit 为服务和 DAO 层编写单元测试用例。
我查看了 Spring 官方网站并尝试了许多其他网站,但无法找到一种简单易行的方法。

谁能给我一些有用的资源?


编辑:
看起来Mockito 是个不错的选择。在 Spring 中使用它的任何好的链接。

感谢 Alex 的建议。

【问题讨论】:

  • 小心。 “模拟服务层”链接现在指向一个恶意页面。
  • @Cenobyte321 谢谢,链接已删除。
  • 如果你使用hibernate和spring boot,为什么不在你开始测试时在初始化的内存数据库中配置一个H2呢?然后在您的测试类上使用 Annotation SpringBootTest AutoConfigureTestEntityManager Transactional 并自动连接您的 dao,您可以在没有模拟的情况下真正测试它。更好的是,您可以使用 MockMvc 并从控制器测试您的整个 Web 服务(所以我猜您的控制器使用了使用 dao 的服务)

标签: spring unit-testing junit dao


【解决方案1】:

在资源方面,Spring 的测试文档非常好。这可以找到here

当您测试服务层时,您将需要使用 Mockito 等模拟库来模拟您的 DAO,从而模拟您的域层。这确保它们是真正的单元测试。

然后,要针对数据库对 DAO 进行集成测试,您可以使用该参考文档中描述的 Spring 事务测试实用程序。

【讨论】:

  • 我发现 Mockito 非常强大且易于使用。我所有的服务单元测试都使用它。
  • 刚刚看到、尝试过并喜欢它。谢啦。任何使用 Mockito 进行 Spring 服务测试的好链接?
【解决方案2】:

对资源了解不多,但如果你的 dao + spring 设置好,这并不难。您将需要以下内容:

  1. JUNIT 明显依赖。使用 maven,类似的东西:

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
    </dependency>
    
  2. 测试类,放置在 src/test/java 中:

    @TransactionConfiguration(defaultRollback = true)
    @ContextConfiguration({ "classpath:test-spring-context.xml" })
    @Transactional  
    @RunWith(SpringJUnit4ClassRunner.class)  
    public class SomeTests { 
        // ...
    }
    
  3. spring 设置的上下文文件引用了放置在 src/test/resources 中的 DAO 数据源。 在您的 test-spring-context.xml 中的某处:

    <import resource="datasource-test.xml" />
    

现在,例如在 Eclipse 中,您可以将项目作为 JUNIT 测试运行。

需要更多详细信息?这个方案适用吗?

【讨论】:

  • 谢谢。如何测试服务层?
  • 不确定服务到底适合你,但我假设它应该保存应用程序逻辑,只要控制器告诉它就调用 DAO 上的 CRUD 方法?如果是这样,那就没有区别了。您只需在上述设置中注入服务类,调用方法,比较结果,然后全部回滚。
  • 是的。我所说的服务是指调用 DAO 方法的类。
  • 如果你真的想对服务层进行单元测试,你应该模拟数据库访问并只测试逻辑。
  • 你说得有道理.. 可能值得考虑。我们通常使用数据库中的模拟对象来测试服务,依靠底层测试来确保我们的 DAO 没有故障,所以最终就好像我们在使用离线实体一样。节省了一些嘲笑,但就像我说的,可能要考虑一下这有多干净..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 2014-12-24
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
相关资源
最近更新 更多