Mockito编写单元测试

Mock是常用的单元测试工具之一,Mockito是Mock工具的一种,能解决现实应用中,绝大部分的场景应用。。

Mockito简单应用的环境准备

使用的项目为Maven Project,使用的测试工具为TestNg,过程中全部使用Mock注解方式。

<!-- Mockito -->
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-all</artifactId>
  <version>1.9.5</version>
</dependency>
<!– TestNg -->
<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.8.13</version>
</dependency>

@Mock与@Spy

  • @Mock对象:对象生成时不会执行任何构造器方法,方法调用时,不执行方法中的任何内容,返回原始默认值。
  • @Spy对象:对象生成时执行构造器方法,方法调用时,执行方法中的任何内容。

重要:使用Mock注解时,对象初始化之前,一定要先执行 MockitoAnnotations.initMocks(this); 方法,使用TestNg时,可以放到@BeforeClass中
提示:Spy对象本质上是Mock对象,它实际上是Mock对象的一种特殊形式

@InjectMocks

@InjectMocks对象:对象生成时会执行构造器方法,如果有多个构造器,则会选择参数最多的构造方法,对象中的属性和属性的Setter方法会被Mock对象(包括@Spy)注入,方法调用时,执行方法中的任何内容。

提示:当InjectMocks对象既有属性又有属性的Setter方法时,这个Setter方法会被执行两次,换句话说,对于属性的注入,其实也是在调用set方法。

Stub(桩)

Stub(桩)表达的一种当假设的情况发生时要做什么的情况设置。
Stub的表达式有两种,一种是when…then…,另一种是do…when…,两种所表达的意思是一样的,然而也有不同之处:
1、使用when…then…的时候,spy对象的方法会被执行一次,而使用do…when…则不会
2、部分do…when…能适用void方法,而when…then…则没有

提示:Mock对象被打桩后就不会再执行了
提示:Injectmocks对象不能被打桩
提示:推荐使用do…when…方式

Stub(桩)-具有返回值的方法

when…thenReturn…
doReturn…when…

Stub(桩)-void方法

Stub针对void方法只有3个选择:执行方法、什么都不做、抛异常
doCallRealMethod…when…
doNothing…when…
doThow…when…

提示:这几个同样适用于具有返回值的方法

验证

验证 verfiy,用于验证Mock对象的执行情况
verify(mock).method()
verify(mock, times(1)).method()
verify(mock, atLeastOnce()).method()
verify(mock, atLeast(1)).method()
verify(mock, atMost(1)).method()
verify(mock, never()).method()

提示:verify(mock).method()等同于verify(mock, times(1)).method()
提示:InjectMocks对象不能被验证

获取参数

对于一些含有参数的void方法,如果参数是个引用对象,并且在void方法中进行了修改,出于某种目的,我们需要获得这个经过修改的参数对象,该怎么办呢?
Mockito提供了ArgumentCaptor类用于进行参数获取。

演示代码

Soldier.java
Weapon.java
Bullet.java
BaseTester.java
TestMockAndSpy.java
TestInjectMocks.java
TestStubForReturnMethod.java
TestVerify.java
TestArgumentCaptor.java

代码说明:此部分代码均为在分享过程中编写的代码,其中士兵、武器、子弹类为测试 对象,其余为测试类

您可以使用Mockito编写PageHelper的单元测试。首先,您需要引入Mockito的API。您可以在这里找到Mockito的API文档和详细信息: 在编写PageHelper的单元测试时,您可以使用PowerMockito来模拟一些对象,比如Example.Criteria对象。您可以使用PowerMockito.mock方法来创建Example.Criteria的模拟实例,然后使用whenNew方法来指定当创建Example.Criteria对象时返回该模拟实例。例如,以下代码是一个示例: ```java // 头上记得加@PrepareForTest({Example.class}) Example.Criteria criteria = PowerMockito.mock(Example.Criteria.class); // 这里为了将目标业务层中的criteria替换成我们自己mock的实例方便后面mock PowerMockito.whenNew(Example.Criteria.class).withArguments(Mockito.any(), Mockito.anyBoolean(), Mockito.anyBoolean()).thenReturn(criteria); ``` 这段代码将创建一个Example.Criteria的模拟实例,并在创建Example.Criteria对象时返回该模拟实例。这样,您就可以在后续的单元测试中使用该模拟实例来模拟Example.Criteria对象的行为。 总结来说,使用Mockito和PowerMockito,您可以用模拟对象来替换掉真正的对象,从而方便地进行PageHelper的单元测试。记得,编写单元测试是一个优秀的开发实践,可以帮助您保证代码的质量和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [开发笔记:哦豁,BOSS说单元测试覆盖率不达标?(Java)](https://blog.csdn.net/qq_36652619/article/details/105364869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值