Java mockito中@injectMocks和@Autowired用法的区别?

Java mockito中@injectMocks和@Autowired用法的区别?,java,spring,dependency-injection,mockito,spring-ioc,Java,Spring,Dependency Injection,Mockito,Spring Ioc,当我使用Mockito和Junit编写测试用例时,我使用@InjectMocks来测试要测试的类。在项目的其他部分,我还看到要测试的类使用了@Autowired 何时可以使用@InjectMocks和@Autowired?当我们试图将它们用于要测试的类时,它们之间有什么区别?@InjectMocks是一种Mockito机制,用于将测试类中声明的字段注入到测试下的类中匹配的字段中。它不要求被测试的类是Spring组件 @Autowired是Spring的注释,用于将bean自动连接到生产、非测试类

当我使用Mockito和Junit编写测试用例时,我使用
@InjectMocks
来测试要测试的类。在项目的其他部分,我还看到要测试的类使用了
@Autowired


何时可以使用
@InjectMocks
@Autowired
?当我们试图将它们用于要测试的类时,它们之间有什么区别?

@InjectMocks
是一种Mockito机制,用于将测试类中声明的字段注入到测试下的类中匹配的字段中。它不要求被测试的类是Spring组件

@Autowired
是Spring的注释,用于将bean自动连接到生产、非测试类中


如果您想在被测试的类中利用
@Autowired
注释,另一种方法是使用它,它允许您声明模拟bean,以便它们将自动连接到被测试的类中,就像Spring自动连接bean一样。但通常这不是必需的。

@InjectMocks
注释告诉Mockito将所有Mock(由
@Mock
注释注释的对象)注入到测试对象的字段中。Mockito为此使用反射

@Autowired
注释告诉Spring框架从其IoC容器中注入bean。Spring在私有字段注入时也使用反射。 您甚至可以使用具有相同效果的
@Inject
注释(JavaEE规范的一部分)

但我建议看看这种方法的好处。在这种情况下,您根本不需要使用
@injectmock
,因为您可以通过构造函数将mock传递给测试对象。在您的测试或生产中,不需要在引擎盖下进行反射


如果您想使用Springbeans的子集创建集成测试,我建议您查看一下
@DirtiesContext
注释。它是Spring框架模块的一部分,通常被称为“Spring测试”。

+1因为我没有听说过springockito,它看起来很漂亮,很干净。springockito很不错,我从来不使用它,因为我喜欢单元测试。然而,我最近(几个月前)听说springockito有一些bug。