【问题标题】:SpringBootTest NULL Secondary DependenciesSpringBootTest NULL 二级依赖
【发布时间】:2022-11-22 09:19:31
【问题描述】:

我正在使用 JUnit 4(不是 5)测试 SpringBoot 休息控制器。 我正在使用 @Autowired 将控制器注入到测试中,并且它以非 null 的形式出现,因此 Spring 应用程序上下文正在交付 bean(我可以将其作为自动装配添加到测试中,并且它是非 null)。 问题是注入的 rest 控制器上的所有自动装配依赖项都是空的(还有一个 @Value 字段),即我从上下文中获取了 bean,但它还没有被自动装配。注意:我不是用 new 手动创建控制器。

这些是测试的注释:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyApplication.class})
@ActiveProfiles({"local", "test"})

我在构建 gradle 中使用了以下依赖项

testImplementation 'junit:junit:4.13.1'
testImplementation 'org.junit.vintage:junit-vintage-engine'

不幸的是我不能发布代码。这是一个多项目 gradle 构建,但我没有跨项目测试。该应用程序位于包含控制器的包之上的包中。

【问题讨论】:

  • 什么是MyApplication.class?通常它应该是一个 spring boot 配置文件,其中包含要加载的指定 beans 集。如果你想加载所有的 bean(包括服务、DAO 等),那么尝试不带参数运行@SpringBootTest
  • 它是 SpringBoot 应用程序类。我试过没有参数的 SpringBootTest - 没有任何区别
  • 我试过向控制器类添加构造函数注入并添加断点。它在测试运行之前被调用并且依赖项被注入,但是当测试运行时它得到注入的控制器的另一个实例,一个具有空依赖项。
  • 仅根据此信息很难判断会发生什么......通常注入控制器的其他 bean 是否有可能来自其他 jar 模块,因此没有被 spring boot 测试处理?
  • 应用程序上的 @EnableAspectJAutoProxy 会把事情搞砸吗?

标签: java spring spring-boot junit4


【解决方案1】:

是的,这是一些面向方面的编程,它拦截对象上的东西并阻止返回真实值——返回 null 而不是从代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2014-11-28
    • 2016-08-20
    • 2019-03-09
    相关资源
    最近更新 更多