Spring集成测试方法?

时间:2013-06-06 19:30:24

标签: spring unit-testing integration-testing junit4 spring-3

我正在开发一个没有单元测试的既定应用程序。我想开始为这个应用程序编写测试用例。 Bean Mocking不存在,我需要花费大量时间进行设置。因此,为了快速入门,因为我们根本没有任何测试用例,我正在考虑设置集成测试,一旦我对所有测试覆盖率感到满意,我将慢慢将其转换为真正的单元测试(通过嘲弄)。由于应用程序很大并且加载弹簧容器需要相当长的时间,我想要一些关于增加转向时间的建议。我可以想到几种方法。

  • 让一些轻量级弹簧容器一直运行,并针对这个轻量级容器运行所有单元测试用例。(或者可以访问其applicationContext)

  • 针对实际服务器运行测试用例。(从IDE远程运行Junit)

  • 利用Spring Junit配置并以某种方式阻止为每个单独的测试用例重新加载上下文。

我确信此用例之前会出现,任何见解都会受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

上下文缓存是Spring的内置功能,因此如果您的测试用例使用相同的配置文件(或文件集),Spring将不会重复加载上下文。查看参考文档的Context management and caching部分:

  

默认情况下,一旦加载,配置的ApplicationContext将重复用于每个测试。因此,每个测试套件仅产生一次设置成本,并且后续测试执行要快得多。在此上下文中,术语测试套件意味着所有测试都在同一个JVM中运行。

答案 1 :(得分:0)

在Spring中运行测试时,您可以将测试指向您希望测试运行的应用程序上下文配置。因此,您不必使用生产应用程序上下文,您可以为测试进行特殊配置。我个人有一个“集成测试应用程序上下文”和“单元测试应用程序上下文”。但是你可以进一步打破这个。

最简单的设置方法是在超类上设置应用程序上下文,并让每个测试从其中一个扩展。

例如。设置:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:BaseSpringIntegrationTestContext.xml")
public abstract class BaseSpringIntegrationTest {

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:BaseSpringUnitTestContext.xml")
public abstract class BaseSpringUnitTest {

然后进行测试

public class BlahTest extends BaseSpringUnitTest  {

下一步是找出如何加快春季环境的开始。对于某些测试,可能根本不需要加载某些大型组件。