【问题标题】:@Import vs @ContextConfiguration in SpringSpring 中的 @Import 与 @ContextConfiguration
【发布时间】:2018-06-28 16:40:03
【问题描述】:

注解的用法有什么不同吗?这两个注解都允许使用多个@Configuration 类来创建ApplicationContext。从他们的文档中,@ContextConfiguration 似乎更适合测试配置,并且来自用于测试的工件 (spring-test),但是,我还没有发现实际的区别。

感谢您的任何想法!

【问题讨论】:

  • @ContextConfiguration 仅可用于其他代码的测试中,它不执行任何操作。 @Import 在测试中是没有用的,只会在 @Configuration 类上用于导入其他配置类(@ImportResource 可以导入 XML 配置文件)。
  • @M. Deinum 嗨,谢谢!但它的目的是什么?我可以使用@Import - 就是这样
  • @Import 所述(又名包含、加载等)其他 java 配置类。例如组件扫描未涵盖的那些(或者您可能禁用了 @Configuration 文件的组件扫描)。或者创建一个单独的配置进行测试,@Imports 是原始配置,以便您可以覆盖 bean ...
  • @M. Deinum 好的,我有第一个想法。但是第二个我可以简单地将@Import 放在测试类上,为什么在这里使用@ContextConfiguration?对不起,如果我是愚蠢的:)
  • 因为正如我已经说过的,@Import 仅对@Configuration 类有用(和功能性)。它不会在测试类上做任何事情,它唯一做的就是占用一行代码。

标签: java spring configuration spring-test


【解决方案1】:

@Import@ContextConfiguration 用于不同的用例,不能互换使用。

@Import 仅对导入其他 @Configuration 文件有用,并且仅在 @Configuration 类上有用(和 afaik)和功能。将@Import 放在测试类上时,它不会很好,因为它不会被处理。

@Configuration
@Import(PersistenceConfig.class)
public class MainConfig {}

如果您禁用了对@Configuration 类的组件扫描,或者您需要来自组件扫描未涵盖的包中的@Configuration 类,则使用@Import 会很有用。

注意:还有@ImportResource,它对旧的基于 XML 的配置文件做同样的事情。

相反的情况对@ContextConfiguration 有效,因为它仅对基于 Spring 的测试类有用(测试使用 SpringRunner 运行 jUnit 4)。它用于为测试提供配置参数以组成测试配置。它可以是 XML、javaconfig(或它们的组合)的集合。

@RunWith(SpringRunner.class)
@ContextConfiguration( classes = {MainConfig.class, TestConfig.class})
public MyTest {}

它还允许指定使用什么来加载这些配置(以及其他)。

【讨论】:

  • 注意:ContextCongifuration 可以与 XML 或 Java 配置一起使用: > 从 Spring 3.1 开始,上下文加载器可以选择支持基于路径或基于类的资源。
  • 嗯...在使用 Spring Boot 时,您实际上可以使用 @Import 注释测试类。 ;-) docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/…
  • @SamBrannen 但它的行为是否完全相同?
【解决方案2】:

在 Spring Boot @Import(SomeConfiguration.class) 添加配置类到现有上下文。它对测试切片很有用:

@DataJpaTest
@Import(SomeConfiguration.class)
class TestSomething(){...}

在这里,您可以从 SomeConfiguration 类访问存储库和 bean。

@ContextConfiguration(classes = SomeConfiguration.class) 表示使用 only this 配置,例如无法使用。 DataJpaTest.

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多