@Autowired 在测试期间

@Autowired during testing

我有一个问题。

不推荐@Autowired 注释,因为Spring 启动2.x。然后我必须使用构造函数。

但在测试期间 (JUnit 5) 我没有任何警告

问题:

这意味着在测试期间使用@Autowired 是一种很好的做法?

field injection不推荐用于一些概念,其中大多数与class在其他地方的用法有关,例如class 可以使用默认(无参数)构造函数实例化,因此不会使用所有或任何依赖项创建

  • 因为 actual class 可以在其他地方实例化,比如在代码的 testing 部分你会收到这个警告
  • 因为测试class通常并不意味着在代码的任何其他部分实例化,你没有警告,这并不意味着没问题,它仍然是现场注入,仍然不推荐

您可以阅读更多相关内容here

JUnit 和 Spock(实际上基于 JUnit)框架正在强制测试 classes 仅具有无参数构造函数。所以它甚至无法实现 - 可能这就是为什么没有提示您潜在问题的原因。

Test classes must not be abstract and must have a single constructor.

来自 junit documentation

再补充一点article

构造函数自动装配的其他优点:

  • 您可以通过代码或调试工具验证正在注入哪种 bean,如果某些东西突然停止按预期工作。
  • 为测试目的创建 class 实例更容易,特别是如果它具有应该模拟的 private/protected 属性并且您正在编写纯 java.[=24= 的测试]