概述
Mockito基本用法
-
Mock.mock(clazz)
// 一般使用静态导入方法 List<String> mockList = Mockito.mock(ArrayList.class);
-
@Mock(以下两种方式二选一)
- 运行每个测试方法前使用
MockitoAnnotations.initMocks(this)
- 单元测试类上添加注解
@ExtendWith(MockitoExtension.class)
//@ExtendWith(MockitoExtension.class) public class MockitoTest { @Mock private List<String> mockList; private List<String> mockList2 = spy(ArrayList.class); @BeforeEach public void beforeEach() { MockitoAnnotations.initMocks(this); } @Test void testMethod(){ // mockList仍然为空,mockList2含一个元素 mockList.add("yangcx"); mockList2.add("yangcx"); // 执行次数验证 verify(mockList, times(2)).size(); verify(mockList, atLeast(1)).size(); verify(mockList, atMost(10)).size(); // 执行顺序验证 mockList.size(); mockList.add("add a parameter"); mockList.clear(); InOrder inOrder = inOrder(mockList); inOrder.verify(mockList).size(); inOrder.verify(mockList).add("add a parameter"); inOrder.verify(mockList).clear(); // 异常验证 assertThrows(NullPointerException.class, () -> mockMap.get("mghio")); } }
- 使用
Mockito.verify
进行方法执行验证。比如方法调用验证、方法调用次数验证、方法调用顺序验证等 - 对使用
@Mock
注解的对象执行任何操作都不会影响源对象的状态 - 需要
Mock
对象产生真实方法调用,可以使用Mockito.spy(clazz)
实现
- 运行每个测试方法前使用
-
@InjectMock
@Mock
创建一个Mock
@InjectMock
创建一个实例,其余使用@Mock(@Spy)
注解的Mock
将被注入到此实例中,管理依赖
@ExtendWith(MockitoExtension.class) public class UserServiceTest { @Mock private MyRepository myRepository; @InjectMocks private MyService myService; @Test public void testInjectMocks() { System.out.println(myService.getMyRepository().getClass()); } }
-
@MockBean
Mockito
框架提供此注解将mock
对象注入到Spring
容器中,该对象会对容器中任何现有相同类型的bean
进行替换;- 如果版本为
SpringBoot2.0+
且当前容器中已有相同类型的bean
时,需要设置spring.main.allow-bean-definition-overriding=true
允许bean
定义覆盖
@Mock vs @InjectMocks
- Usually when you are unit testing, you shouldn’t initialize Spring context. So remove Autowiring
- Usually when you do integration testing, you should use real dependencies. So remove mocking
最后
以上就是鲤鱼发箍为你收集整理的Mockito使用的全部内容,希望文章能够帮你解决Mockito使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复