- 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(…)当执行某个方法时,抛出异常- 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- 5.mockito的流程1. 添加依赖: 在 Maven 或 Gradle 项目中,首先需要添加 Mockito 的依赖。Maven 示例:<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.x.x</version> <scope>test</scope></dependency>
2. 创建模拟对象: 使用 Mockito 提供的mock
方法创建一个模拟对象。List mockedList = mock(List.class);
3. 配置模拟对象(Stubbing): 配置模拟对象的行为,即当调用特定方法时应该返回什么值。when(mockedList.get(0)).thenReturn("First Element");
4. 使用模拟对象: 在测试中使用模拟对象。String element = mockedList.get(0);
5. 验证交互: 验证模拟对象上是否进行了预期的交互。verify(mockedList).get(0);
标签:
单元测试
本文转载自: https://blog.csdn.net/Ezreal12/article/details/136266078
版权归原作者 Ezreal389 所有, 如有侵权,请联系我们删除。
版权归原作者 Ezreal389 所有, 如有侵权,请联系我们删除。