diff --git a/docs/guides/单元测试.md b/docs/guides/单元测试.md index d985c28..da59651 100644 --- a/docs/guides/单元测试.md +++ b/docs/guides/单元测试.md @@ -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)