SpringRunner 只初始化给定的 bean

SpringRunner initializing only given beans

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

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

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
        <property name="requiredParameterValue" value="false" />
    </bean>
    

    缺点是每个测试都有单独的 applicationContext.xml。口是心非尤其令人不快,因为 80% 的配置对于每个测试都是相同的。有没有一种方法可以定义 bean 以直接在测试中初始化,而不必使用单独的 xml 进行配置?

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

您能否评论一下这两种方法,哪个更标准,更合适?

正如 M. Deinem 指出的...

是的,Spring TestContext Framework 就是这么聪明,自从我在 2007 年推出它以来就一直如此。;-)

上下文缓存实际上是 Spring TestContext Framework.

的主要功能之一

有关详细信息,请参阅 Spring 参考手册中 测试 章节的 Context Caching 部分。