Mockito @InjectMocks 注解注入 mock 对象
mockito 会将 @Mock
、@Spy
修饰的对象自动注入到 @InjectMocks
修饰的对象中。
注入方式有多种,mockito 会按照下面的顺序尝试注入:
- 构造函数注入
- 设值函数注入(set函数)
- 属性注入
示例:
准备两个业务类:
package demo; import java.util.Random; public class HttpService { public int queryStatus() { // 发起网络请求,提取返回结果 // 这里用随机数模拟结果 return new Random().nextInt(2); } }
package demo; public class ExampleService { private HttpService httpService; public String hello() { int status = httpService.queryStatus(); if (status == 0) { return "你好"; } else if (status == 1) { return "Hello"; } else { return "未知状态"; } } }
编写测试类:
import org.junit.Assert; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.mockito.Mockito.when; public class ExampleServiceTest { @Mock private HttpService httpService; @InjectMocks private ExampleService exampleService = new ExampleService(); // 会将 httpService 注入进去 @Test public void test01() { MockitoAnnotations.initMocks(this); when(httpService.queryStatus()).thenReturn(0); Assert.assertEquals("你好", exampleService.hello()); } }
转载:https://www.letianbiji.com/java-mockito/mockito-@injectmocks.html