SpringRunner只初始化给定的bean

SpringRunner只初始化给定的bean,spring,spring-mvc,spring-test,Spring,Spring Mvc,Spring Test,我正在尝试实施Spring集成测试,我正在考虑两种方法: 对于每个测试,都有不同的配置,并且只初始化给定测试所需的bean。这意味着测试是隔离的,Spring上下文应该很快初始化,因为它不需要两个多的依赖项。我会用它来忽略单元化bean: <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"> <property name="requ

我正在尝试实施Spring集成测试,我正在考虑两种方法:

  • 对于每个测试,都有不同的配置,并且只初始化给定测试所需的bean。这意味着测试是隔离的,Spring上下文应该很快初始化,因为它不需要两个多的依赖项。我会用它来忽略单元化bean:

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
        <property name="requiredParameterValue" value="false" />
    </bean>
    
    
    
    缺点是每个测试都有单独的
    applicationContext.xml
    。这种双重性尤其令人不快,因为80%的配置对于每个测试都是相同的。有没有一种方法可以定义bean,以便在测试中直接初始化,而不必使用单独的XML进行配置

  • 使用所有bean初始化完整的应用程序将简化测试过程,因为我们不必挑选bean并运行它。然而,这将需要更长的时间来启动和重新启动应用程序的每一类测试将需要很长的时间。解决方案是,如果应用程序可以在运行所有测试之前启动,并且不会为每个测试类重新启动。这是否可行


  • 你能评论一下这两种方法吗,哪一种更标准、更合适?

    正如M.Deinem指出的那样

    是的,SpringTestContext框架就是这么聪明,自从我在2007年引入它以来就一直如此

    上下文缓存实际上是SpringTestContext框架的主要特性之一


    有关详细信息,请参阅《Spring参考手册》中“测试”一章的章节。

    为什么需要在测试之间重新启动应用程序?找到另一种方法(重新)使用数据。Spring只会启动应用程序一次,并在默认情况下将其重新用于不同的测试(因此,在我看来,基本上就像是在框架周围工作一样)。默认情况下,这真的有那么聪明吗?对我来说,类
    TestSomethingIT
    testsomethingeleit
    都有注释
    @RunWith(SpringRunner::class)
    很奇怪,它会发现它们在
    @ContextConfiguration
    中都有相同的
    applicationContext.xml
    ,因此不会运行应用程序两次,每个测试类一次。是的,默认情况下就是这样。