@Mock 和 @InjectMocks的区别

说明

在 Mockito 中,@Mock@InjectMocks 是用于处理模拟对象的注解,但它们有不同的作用和用途:

  1. @Mock 注解:

    • @Mock 注解用于创建一个模拟对象。模拟对象是用来模拟一个类或接口的实例,以便在测试中模拟该对象的行为。
    • 当您使用 @Mock 注解标记一个字段时,Mockito 会自动为该字段创建一个模拟对象,并将其初始化。
    • @Mock 主要用于模拟测试目标类(被测试类)中的依赖项或其他与被测试类交互的对象。
    @Mock
    private SomeDependency dependency; // 创建 SomeDependency 类的模拟对象
    
  2. @InjectMocks 注解:

    • @InjectMocks 注解用于注入模拟对象到被测试类(测试目标类)的字段中。
    • 当您使用 @InjectMocks 注解标记一个字段时,Mockito 会尝试将模拟对象自动注入到该字段中,以便在测试中使用模拟对象来模拟依赖项。
    • @InjectMocks 主要用于注入模拟对象到被测试类中,以模拟被测试类的依赖项。
    @InjectMocks
    private SomeService service; // 将模拟对象自动注入到 SomeService 类中
    

总结:

  • @Mock 用于创建模拟对象。
  • @InjectMocks 用于注入模拟对象到被测试类中,以模拟依赖项。
  • 通常,您会在测试中同时使用这两个注解,创建模拟对象并将其注入到被测试类中,以便模拟依赖项并进行单元测试。

实战

    private UserService userService;
 	@Mock
    private UserDao userDao;
    @Before
    public void setUp() {
        userService = new UserService(userDao);
    }

等价于

	@InjectMocks
    private UserService userService;
 	@Mock
    private UserDao userDao;

你可能感兴趣的:(java,单元测试)