2011-12-22 156 views
26

我正在研究Spring应用程序(Spring 3.0)和以下分层体系结构,即Controller -> Service -> DAO layersJunit测试Spring服务和DAO层

我想写服务和DAO层的单元测试用例,使用Junit
我查了春季官方网站,也尝试了很多其他网站,但无法弄清楚一个简单而简单的方法。

任何人都可以提供一些有用的资源吗?


编辑:
貌似Mockito是不错的选择。在Spring中使用它的任何好链接。

谢谢Alex建议。

+0

小心。链接“Mocking服务层”现在导致恶意页面。 – Cenobyte321

+0

@ Cenobyte321谢谢,链接已删除。 – xyz

+0

如果您使用休眠和弹簧启动,为什么不在开始测试时将内存数据库中的H2配置为已初始化?然后在你的测试类上使用Annotation SpringBootTest AutoConfigureTestEntityManager Transactional,只需Autowired你的dao,你就可以真正地测试它,而不会模拟。更好地,你可以使用MockMvc并从控制器测试你的整个webservice(所以我想你控制器使用服务,使用dao) – amdev

回答

25

就资源而言,Spring的测试文档非常好。这可以找到here

当您测试服务层时,您将需要使用一个模拟库(如Mockito)来模拟您的DAO以及您的域图层。这确保它们是真正的单元测试。

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

+0

谢谢。我不知道Mockito。将尝试并更新你。 – xyz

+0

我发现Mockito功能非常强大,易于使用。我所有的服务单元测试都使用它。 –

+0

刚刚看到,尝试并喜欢它。谢啦。 使用Mockito进行Spring服务测试的任何好的链接? – xyz

4

不知道很多有关的资源,但它并不难,如果你有你的DAO +弹簧设定很好做。您需要以下内容:

  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. 为您的春季设置上下文文件中引用你的DAO数据源放在里面SRC /测试/资源。 某处在您的测试弹簧的context.xml:

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

现在比如在Eclipse中,您可以运行该项目的JUnit测试。

需要更多的细节?此解决方案是否适用?

+0

谢谢。我如何测试服务层? – xyz

+0

不知道什么是服务,但我假设它应该保存应用程序逻辑,只要控制器告诉它,就调用DAO上的CRUD方法?如果是这样,没有区别。您只需在上面的设置中注入服务类,调用方法,比较结果,之后所有将被回滚。 – Pete

+0

是的。通过服务我的意思是调用DAO方法的类。 – xyz