gpt4 book ai didi

spring-boot-test - 如何使用@TestConfiguration 避免 src/test/java 扫描?

转载 作者:行者123 更新时间:2023-12-02 04:24:18 28 4
gpt4 key购买 nike

根据 25.3.3. Excluding Test Configuration这种能力存在:

When placed on a top-level class, @TestConfiguration indicates that classes in src/test/java should not be picked up by scanning



我创建了两个 @Configuration FilledWithBeanTestConfig@TestConfiguration DummyTestConfig在项目的根路径/包中 src/test/java/com/example/mvctries/ .我的 main包含方法的类故意用 @ComponentScan 注释只是为了不小心捡到 FilledWithBeanTestConfig ;关于这种情况,Spring特别警告:

If your application uses component scanning (for example, if you use @SpringBootApplication or @ComponentScan), you may find top-level configuration classes that you created only for specific tests accidentally get picked up everywhere.



我用过 @Import(DummyTestConfig.class)@WebMvcTest带注释的测试类放置在 src/test/java/com/example/mvctries/controller/ 中;我期待着 @Configuration FilledWithBeanTestConfig只是被忽略,但事实并非如此。搬家 DummyTestConfigsrc/test/java/com/example/mvctries/controller/也没有帮助。

测试上面介绍的方式时我做错了什么 src/test/java扫描忽略功能?
我应该如何正确使用 @TestConfiguration为了使用这个 src/test/java扫描忽略功能?
我将如何使用 @SpringBootApplication 测试此功能使用 @ComponentScan 仅扫描组件而不是有意扫描?

虽然上面的问题可能看起来太多了,但它们实际上是询问以下问题的另一种方式 一个问题 : 如何制作一个项目来清楚地证明如何 @TestConfiguration使用导致 src/test/java 中的类不应该被扫描拾取。

更新

这是示例项目: https://github.com/adrhc/spring-boot-test-checks.git ;它在运行应用程序时使用端口 8083;最好运行测试类。

最佳答案

@ComponentScan没有 filter属性将始终加载所有 @Configuration类。 @TestConfiguration仅适用于那个带注释的类,而不适用于整个包/目录。
这似乎是文档中的一个不幸的表述 - 它讨论了 @TestConfiguration 的用法在 顶级类(class) src/test/java而不是在 the inner class of you test .
简而言之:永远不要使用 @ComponentScan没有 TypeExcludeFilter - 它将开始加载您所有 SpringBootTest 的所有内容测试以及使用切片的测试 - 这首先超越了切片的目的。
一旦你摆脱@ComponentScan (或者一旦您添加了上述过滤器):

  • @SpringBootTest将加载所有 @Configuration类但不会加载 @TestConfiguration类。 @TestConfiguration需要时可以使用 @Import 选择类.
  • 测试切片如 @WebMvcTest除非您使用 @Import 指示它们,否则不会加载任何额外的自定义类/配置.如果您的所有测试都使用 @WebMvcTest (或其他切片)需要额外配置,然后您可以轻松创建自己的切片或使用 META-INF/spring.factories 文件(尽管是一个单独的主题)更改现有切片。
  • 关于spring-boot-test - 如何使用@TestConfiguration 避免 src/test/java 扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56156432/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com