当前位置:  开发笔记 > 编程语言 > 正文

使用Spring进行单元测试与集成测试

如何解决《使用Spring进行单元测试与集成测试》经验,为你挑选了2个好方法。

我正在开发一个Spring MVC项目,我对源代码树中的所有各种组件进行了单元测试.

例如,如果我有一个HomeController需要LoginService注入的控制器,那么在我的单元测试中,HomeControllerTest我只是将对象实例化为正常(在Spring之外)并注入属性:

protected void setUp() throws Exception {
    super.setUp();
    //...
    controller = new HomeController();
    controller.setLoginService( new SimpleLoginService() );
    //...
}

这对于将每个组件作为一个独立的单元进行测试非常有用 - 除了我在项目中有几十个类,在编写一个类并为它编写成功的单元测试后,我一直忘记更新我的Spring MVC上下文文件部署的应用程序中的实际布线.我发现当我将项目部署到Tomcat并从非有线bean中找到一堆NullPointers时,我忘了更新上下文文件.

所以,这是我的问题:

    这是我的第一个Spring项目 - 正如我所做的那样,为单个bean创建单元测试是正常的,然后创建第二套测试(集成测试)来测试一切是否与实际应用程序上下文一致?这是否有既定的最佳实践?

    另外,如何将单元测试与集成测试分开?我有所有的源代码src,单元测试test- 应该有第二个测试文件夹(如test-integration)用于集成测试用例?

由于这是我的第一个春季项目,我很好奇其他人通常会做这类事情 - 而不是重新发明轮子我宁愿问社区其他人.



1> Ken Gentle..:

我不能说是最佳实践,但这是我过去所做的.

单元测试:

为非平凡的bean(即大多数与Spring相关的bean)创建单元测试

在可行的情况下使用Mocks进行注入服务(即,大多数情况下,如果不是所有时间).

在项目test目录中对这些测试使用标准命名约定.使用TestTestCase作为类名的前缀或后缀似乎被广泛实践.

整合测试:

创建AbstractIntegrationTestCase一个Spring WebApplicationContext用于在intetgration test clases中使用的.

test目录中使用命名约定进行集成测试.我已经使用IntTestIntegrationTest作为这些测试的前缀或后缀.

设置三个Ant test目标:

    全部测试(或任何你想要命名的东西):运行单元和集成测试

    测试:运行单元测试(仅因为test似乎是单元测试的最常见用法)

    测试集成:运行集成测试.

如上所述,您可以使用对项目有意义的命名约定.

至于将单元从集成测试分离到一个单独的目录中,只要开发人员及其工具可以轻松找到并执行它们,我认为这并不重要.

作为一个例子,我使用Spring工作的最后一个Java项目完全使用了上面描述的内容,集成测试和单元测试存在于同一test目录中.另一方面,Grails项目明确地将通用测试目录下的单元和集成测试目录分开.



2> Benjamin Woo..:

一些孤立的点:

是的,这是Spring测试的常用方法 - 单独的单元测试和集成测试,前者不加载任何Spring上下文.

对于您的单元测试,可以考虑进行模拟,以确保您的测试集中在一个隔离模块上.

如果你的测试是依赖大量的依赖,那么它们实际上不是单元测试.它们是集成测试,您可以使用new而不是依赖注入来连接依赖项.当您的生产应用程序使用Spring时浪费时间和重复工作!

用于调出Spring上下文的基本集成测试非常有用.

@required注释可以帮助您确保捕获Spring连接中所需的依赖项.

也许看看Maven会给你明确的阶段来绑定你的单元和集成测试.Maven在Spring社区中得到了广泛的应用.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有