使用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
,在单元测试中test
-test-integration
集成测试用例是否应该有第二个测试文件夹(例如)?
因为这是我的第一个Spring项目,所以我很好奇其他人通常会如何做这种事情-而不是重新发明轮子,而是向其他社区询问。
回答:
我不能说是一种最佳实践,但这是我过去所做的事情。
- 为非平凡的bean创建单元测试(即,大多数与Spring相关的bean)
- 在可行的情况下(例如,即使不是全部时间也可以使用),将Mocks用于注入服务。
- 在项目
test
目录中为这些测试使用标准命名约定。使用Test
或TestCase
作为类名的前缀或后缀似乎已被广泛实践。
- 创建一个
AbstractIntegrationTestCase
设置Spring
WebApplicationContext
用于完整性测试案例的。 - 对
test
目录中的集成测试使用命名约定。我已经将这些测试用作IntTest
或IntegrationTest
作为前缀或后缀。
设置三个Ant test
目标:
- 全部测试(或任何您想命名的):运行单元测试和集成测试
- 测试:运行单元测试(只是因为这
test
似乎是单元测试的最常用用法 - 测试集成:运行集成测试。
如前所述,您可以使用对项目有意义的命名约定。
至于将单元测试与集成测试分离到一个单独的目录中,只要开发人员 及其工具 能够轻松找到并执行它们,我认为这并不重要。
例如,我与Spring合作的最后一个Java项目完全使用了上面描述的内容,集成测试和单元测试位于同一test
目录中。另一方面,Grails项目将常规测试目录下的单元测试目录和集成测试目录明确分开。
以上是 使用Spring进行单元测试与集成测试 的全部内容, 来源链接: utcz.com/qa/422188.html