-
Mockito
-
1.为什么要mock?
mock等于是创建一个虚拟对象(不会去跑真实的),在测试环境中替换掉真是对象,从而
- 验证该对象某些方法的调用情况,调用多少次,参数等
- 给对象做一个定义,指定返回结果或者特定的动作
-
2.什么是mock,stub和spy
List list = new LinkedList(); List spy = spy(list);
- mock: Mock 对象是一种完全由测试控制的对象,它模拟了真实对象的行为。Mock 对象通常用于隔离要测试的代码,从而不依赖于外部系统或操作。在 Mockito 中,mock 对象不会保留任何状态,调用未配置的方法通常会返回默认值。
- stub: Stub 是一种模拟对象,用于为测试提供预定义的响应。Stubbing 指的是设置模拟对象的行为,即当调用某个方法时返回特定的响应。在 Mockito 中,stubbing 是通过
when().thenReturn()
这样的链式调用完成的。 - spy: Spy 是 Mockito 中的一个功能,它允许你创建一个对象的包装器,这个包装器对于大多数方法调用都是透明的,但是你可以监视或更改某些特定方法的行为。Spy 通常用于部分模拟真实对象的行为。
-
3.基本的操作:
- Mock()方法可以用来mock一个对象或者一个接口。当我们不对行为进行具体定义的时候,就会一直是默认值
- e.g: Random random = Mockito.mock(Random.class, “Test”);
- e,g: random.nextInt()会一直都是0
- 验证和断言
- Verify()验证对象是否发生过某些行为。
- e.g: Verify(mock).someMethod(..);
- 断言:Assertions,即assertequals/null/notnull/true等
- assertEquals(expected,actual);
- 当使用mock对象时,如果不对其行为进行定义则会返回默认值。在这里对行为进行定义我们称为打桩,即给Mock对象打桩
- when(method).thenReturn(…)当执行某个方法时,返回某个值
- when(method).thenThrow(…)当执行某个方法时,抛出异常
- Verify()验证对象是否发生过某些行为。
- Mock()方法可以用来mock一个对象或者一个接口。当我们不对行为进行具体定义的时候,就会一直是默认值
-
4.mock注解:
- @Mock:
- 通过这个注释的对象或者接口等同于mock()方法创建
- 但是需要配合MockitoAnnotation.openMocks(this)去使用
- @InjectMocks (和mock的区别)
- injectmocks是mockito框架中的一个功能,它可以用来自动注入mock对象到被测试对象中。它的作用是将mock对象注入到被测试对象的构造函数或属性中,以便在测试中使用。
- injectMocks用于集成测试,它可以将mock对象注入到被测试的类或方法中,以测试整个系统的正确性和可靠性。InjectMocks可以进行自动注入,将需要被mock的对象注入到被测试的对象中,从而提高测试的效率和精度
- injectmocks主要是将Mock对象注入到被测试类中,以便测试某些功能
- @BeforeEach:会在执行测试前执行
- 一般会设置setup()即测试前的准备
- @AfterEach:会在执行测试后执行
- 可以设置after()方法
- @Spy和Spy
- 被Spy的对象会走真实的方法,而mock不会
- Spy()方法的参数是对象实例,而mock参数是class
- @Mock:
-
5.mockito的流程
-
添加依赖: 在 Maven 或 Gradle 项目中,首先需要添加 Mockito 的依赖。
Maven 示例:
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.x.x</version> <scope>test</scope> </dependency>
-
创建模拟对象: 使用 Mockito 提供的
mock
方法创建一个模拟对象。List mockedList = mock(List.class);
-
配置模拟对象(Stubbing): 配置模拟对象的行为,即当调用特定方法时应该返回什么值。
when(mockedList.get(0)).thenReturn("First Element");
-
使用模拟对象: 在测试中使用模拟对象。
String element = mockedList.get(0);
-
验证交互: 验证模拟对象上是否进行了预期的交互。
verify(mockedList).get(0);
-
-
单元测试Mockito
最新推荐文章于 2024-06-17 13:52:40 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)