我正在开发一个没有单元测试的既定应用程序。我想开始为这个应用程序编写测试用例。 Bean Mocking不存在,我需要花费大量时间进行设置。因此,为了快速入门,因为我们根本没有任何测试用例,我正在考虑设置集成测试,一旦我对所有测试覆盖率感到满意,我将慢慢将其转换为真正的单元测试(通过嘲弄)。由于应用程序很大并且加载弹簧容器需要相当长的时间,我想要一些关于增加转向时间的建议。我可以想到几种方法。
让一些轻量级弹簧容器一直运行,并针对这个轻量级容器运行所有单元测试用例。(或者可以访问其applicationContext)
针对实际服务器运行测试用例。(从IDE远程运行Junit)
利用Spring Junit配置并以某种方式阻止为每个单独的测试用例重新加载上下文。
我确信此用例之前会出现,任何见解都会受到高度赞赏。
答案 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 {
下一步是找出如何加快春季环境的开始。对于某些测试,可能根本不需要加载某些大型组件。