整理Mockito结合ArgumentCaptor捕获多次调用的方法的参数
今天在对业务代码进行开发时,发现需要捕获多次调用的方法的参数,验证参数传递的正确性,这里对获取方法进行总结。
首先,模拟一个简单的测试场景,有一个对外提供服务的类:
@Component
public class CaptorLearning {
private DalService dalService;
@Autowired
public CaptorLearning(DalService dalService) {
this.dalService = dalService;
public int getResult(int num1, int num2, int num3) {
int result1 = dalService.doHandle(num1, num2);
int result2 = dalService.doHandle(num1, num3);
return result1 + result2;
有一个内部的业务处理类:
@Component
public class DalService {
public int doHandle(int num1, int num2) {
return num1 + num2;
这里要对CaptorLearning进行单元测试覆盖,因此需要判断dalService两次调用了doHandle方法,并获取相应的参数,判断是否参数调用正确。
首先是两次调用,可以利用Mockito
提供的verify
方法,来判断调用次数,代码如下:
@Test
public void testByVerify() {
captorLearning.getResult(num1, num2, num3)
整理Mockito结合ArgumentCaptor捕获多次调用的方法的参数今天在对业务代码进行开发时,发现需要捕获多次调用的方法的参数,验证参数传递的正确性,这里对获取方法进行总结。首先,模拟一个简单的测试场景,有一个对外提供服务的类:@Componentpublic class CaptorLearning { private DalService dalService; @Autowired public CaptorLearning(DalService dal.
1 mock 静态方法mockito库并不能mock静态方法,需要依赖powermock第一步:给类添加注解// 静态类优先加载,所以需要提前告诉powermock哪些静态类需要mock
@ContextConfiguration
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.cl...
有时,不仅要验证对象的方法是否被调用,还要检查传给方法的参数是否正确。
今天,埃德蒙的工作是给类DownloadActive写ut。
DownloadActive的功能是下载软件,并将成功与否的结果通知Listener.
doTask首先做下载的动作,然后发通知。
发通知,即调用listener的report方法。
为了方便说明,将doTask简化,只是通知侦听者们一个字符串“OK”。...
Mockito 是一个针对 Java 的单元测试模拟框架,可以简化单元测试过程中测试上下文对象。它可以做如下事情:
1)模拟方法的返回值、模拟抛出异常
2)验证方法被调用次数、验证方法参数类型
3)捕获方法参数值
4)为真实对象创建一个监控(spy)对象
1)不能 Mock 静态方法
2)不能 Mock private 方法
3)不能 Mock final class
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
@SuppressWa...
在其他语言中, 可以定义多个重名的方法, 只要保证方法签名的唯一即可. 方法签名包含 3 个部分: 方法名, 参数数量, 参数类型.
Python 中, 方法的参数没有类型 (调用时确定参数类型 ), 参数的也可以由可变参数控制. 因此, Python 中是没有方法的重载的. 定义一个方法即可有多种调用方式, 相当于实现了其他语言中的方法的重载.
如果我们在类通中定义了多个重名的方法, 只有最后一个方法有效.
建议: 不要使用重名方法 ! Python 中方法没有重载.
文章目录目前开发中,单元测试遇到的问题解决方案--MockJunit4 + Mockito:Mockito常用注解:Mockito常用方法:Tips:总结
目前开发中,单元测试遇到的问题
在业务代码开发完成以后,需要对新增代码进行单元测试,由于项目依赖的第三方组件以及外部系统接口较多,每次执行单元测试时都需要启动整个项目,加载各种依赖,而且由于网络限制有时还需要申请各种ACL,且项目启动耗时较长,有时仅仅为了跑一个仅有几行代码的单元测试,却要耗时几分钟等待项目的启动,严重违背单元测试的初衷。这种情况导致了大
Mockito框架官方地址mockito,文档地址,中文版文档。
Mockito库能够Mock对象、验证结果以及打桩(stubbing)。
1. Mock和Mockito的关系
在软件开发中提及mock,通常理解为模拟对象。
为什么需要模拟? 在我们一开始学编程时,我们所写的对象通常都是独立的,并不依赖其他的类,也不会操作别的类。但实际上,软件中是充满依赖关系的,比如我们会基于service类写操作类,而service类又是基于数据访问类(DAO)的,依次下去,形成复杂的依赖关系。
MyClass myClassMock = mock(MyClass.class);
myClassMock.myMethod("expectedArg1", 123);
verify(myClassMock).myMethod("expectedArg1", 123);
如果`myMethod`方法被调用时传递的参数与期望的参数不匹配,那么`verify`方法会抛出异常。