@Mock与@InjectMocks一般搭配组合使用,是单元测试必不可少的注解
@Mock:需要模拟的类,我们需要模拟哪些类,就用它修饰哪些类的变量,常用于第三方服务service
@InjectMocks:要测试的类,使用@Mock修饰的对象,就是我们测试哪个类,就用它修饰对应的变量,会整合使用@Mock修饰的对象文章来源:https://www.toymoban.com/news/detail-740934.html
直接上代码文章来源地址https://www.toymoban.com/news/detail-740934.html
@Service
public class ThirdService {
public Object getThirdUser(String userId) {
return new Object();
}
}
@Service
public class UserService {
@Autowired
private ThirdService thirdService;
public Object getUser(String userId) {
return thirdService.getThirdUser(userId);
}
}
//测试UserService
@SpringBootTest
class UserServiceTest {
//需要模拟的类(因为UserService中使用了这个类)
@Mock
private ThirdService thirdService;
//要测试的类,使用@Mock修饰的对象
//这时候userService对象中持有的thirdService变量就是模拟的对象了
@InjectMocks
private UserService userService;
@Test
public void testGetUser() {
//设定行为返回数据,我们可以设定模拟对象的行为,当然也可以不设定
//any代表任意参数,返回a对象
Object a = new Object();
when(thirdService.getThirdUser(any())).thenReturn(a);
//执行被测试的方法,这时候内部调用的ThirdService就是模拟对象了,行为结果就是上面设置的
Object abc = userService.getUser("abc");
//验证结果
assertEquals(a,abc);
}
}
到了这里,关于单元测试之@Mock与@InjectMocks(一文搞懂)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!