java – 使用Spring的单元测试和集成测试

我正在开发一个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,单元测试在测试 – 是否应该有一个第二个测试文件夹(如测试集成)集成测试用例?

因为这是我的第一个Spring项目,我很好奇别人通常做什么这样的事情 – 而不是重新发明轮,我宁愿问其他社区。

我不能说是一个最佳实践,但这里是我在过去做的。

单元测试:

>为非平凡bean(即,大多数Spring相关的bean)创建单元测试,
>使用Mocks注入服务在实际(即,大多数,如果不是所有的时间)。
>对项目测试目录中的这些测试使用标准命名约定。使用Test或TestCase作为类名的前缀或后缀似乎被广泛实践。

集成测试:

>创建一个AbstractIntegrationTestCase,它设置一个Spring WebApplicationContext用于集成测试clases。
>对测试目录中的集成测试使用命名约定。我使用IntTest或IntegrationTest作为这些测试的前缀或后缀。

设置三个Ant测试目标:

> test-all(或任何你想命名的):运行单元和集成测试
> test:运行单元测试(只是因为测试似乎是单元测试最常见的用法
>测试集成:运行集成测试。

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

至于将单元从集成测试分离到单独的目录,我认为没有关系,只要开发人员和他们的工具可以容易地找到和执行它们。

例如,我使用Spring的最后一个Java项目使用了上面描述的内容,集成测试和单元测试存在于同一个测试目录中。另一方面,Grails项目在通用测试目录下显式地分离单元和集成测试目录。

http://stackoverflow.com/questions/281758/unit-tests-vs-integration-tests-with-spring

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 使用Spring的单元测试和集成测试