This commit is contained in:
whz 2024-06-05 14:16:11 +08:00
parent e3d48be549
commit 22ccd24f77

View File

@ -185,6 +185,28 @@ public class UserServiceImplTest {
```
@InjectMocks@Mock 是 Mockito 框架中的两个注解,它们在单元测试中用于创建对象和模拟行为。以下是它们的主要区别:
目的:
- @Mock用于创建一个模拟对象mock object。这个模拟对象不会执行实际的方法而是返回预定义的值或者抛出预期的异常。它允许测试者控制方法的行为和验证方法调用。
- @InjectMocks:用于创建一个被测试类的实例(通常称为“被测对象”或“系统组件”)。这个注解告诉 Mockito 自动注入在同一个测试类中声明的 @Mock@Spy 对象。
对象创建:
- @Mock:创建一个全新的模拟对象,不依赖于任何其他对象。
- @InjectMocks:创建一个被测试类的实例,如果该类有依赖,那么这些依赖可以通过 @Mock@Spy 注解的实例来注入。
依赖注入:
-@Mock 不会自动注入到任何地方,除非手动设置。
- @InjectMocks 会查找并注入与其类型匹配的 @Mock@Spy 对象作为依赖。
使用场景:
- @Mock 通常用于测试中不需要实际行为的依赖对象。
- @InjectMocks 用于测试主要的业务逻辑类,它的依赖可以是模拟的,也可以是真实的(如果没有指定模拟,则使用默认构造函数创建)。
初始化:
- 使用 @RunWith(MockitoJUnitRunner.class) 或在测试方法前调用 MockitoAnnotations.initMocks(this) 是为了初始化这些注解标记的模拟对象。
在编写单元测试时,通常会结合使用 @Mock@InjectMocks@Mock 用来创建模拟依赖,而 @InjectMocks 用来创建包含这些模拟依赖的被测对象实例。这样可以确保在测试中控制依赖的行为,同时隔离被测代码。
## 参考
[微软:.NET Core 和 .NET Standard 单元测试最佳做法](https://learn.microsoft.com/zh-cn/dotnet/core/testing/unit-testing-best-practices)