使用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时,我忘记了更新上下文文件。

所以,这是我的问题:

  1. 这是我的第一个Spring项目-是否像我一样为单个bean创建单元测试,然后创建第二组测试(集成测试)以测试一切是否与实际应用程序上下文一样正常,这是否正常?是否有确定的最佳实践?

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

因为这是我的第一个Spring项目,所以我很好奇其他人通常会如何做这种事情-而不是重新发明轮子,而是向其他社区询问。

回答:

我不能说是一种最佳实践,但这是我过去所做的事情。

  • 为非平凡的bean创建单元测试(即,大多数与Spring相关的bean)
  • 在可行的情况下(例如,即使不是全部时间也可以使用),将Mocks用于注入服务。
  • 在项目test目录中为这些测试使用标准命名约定。使用TestTestCase作为类名的前缀或后缀似乎已被广泛实践。

  • 创建一个AbstractIntegrationTestCase设置SpringWebApplicationContext用于完整性测试案例的。
  • test目录中的集成测试使用命名约定。我已经将这些测试用作IntTestIntegrationTest作为前缀或后缀。

设置三个Ant test目标:

  1. 全部测试(或任何您想命名的):运行单元测试和集成测试
  2. 测试:运行单元测试(只是因为这test似乎是单元测试的最常用用法
  3. 测试集成:运行集成测试。

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

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

例如,我与Spring合作的最后一个Java项目完全使用了上面描述的内容,集成测试和单元测试位于同一test目录中。另一方面,Grails项目将常规测试目录下的单元测试目录和集成测试目录明确分开。

以上是 使用Spring进行单元测试与集成测试 的全部内容, 来源链接: utcz.com/qa/422188.html

回到顶部