代码之家  ›  专栏  ›  技术社区  ›  gene b.

@在实际(非测试)Spring Boot应用程序运行中错误地使用了TestConfiguration模拟对象

  •  0
  • gene b.  · 技术社区  · 3 年前

    我有几个 @TestConfiguration 要用于的类 仅单元测试 具有 SpringBootTest 如下

    @TestConfiguration
    public class MockApplicationServiceConfiguration {
        @Bean
        public ApplicationService applicationService() {  
           return new ApplicationService() {
             //...
           }
        }
    

    然后在单元测试中

    @SpringBootTest
    @Import(value = "MockApplicationServiceConfiguration.class")
    

    这些单元测试可以正常工作,并且可以正确地替换mock配置对象来代替实际的运行对象。 但是当我运行 真实的 应用程序,通过启动MainApplication.java(它具有真正的autowired依赖项),我看到mock对象正在被使用,甚至用于实际的应用程序运行!

    该项目分为 main & test 如下所示。为什么实际运行会拾取测试配置对象?

    enter image description here

    1 回复  |  直到 3 年前
        1
  •  0
  •   gene b.    3 年前

    我找到了解决方案,根据 this post : 去除 @TestConfiguration 来自被嘲笑的Import'ed类。现在真正的应用程序不加载这些对象,而 @SpringBootTest 测试仍然通过加载 @Import !

    尽管 @测试配置 应该只是测试,Spring仍然将其视为 @Configuration ,显然,这会影响实际应用程序的运行。

    以下作品:否 @测试配置 在mock对象上,以及 @SpringBootTest/Import 如前所述:

    public class MockApplicationServiceConfiguration {
      //..
    }
    
    @SpringBootTest
    @Import(value = "MockApplicationServiceConfiguration.class")