1.概述

在这个简短的教程中,我们将专注于如何测试回调使用流行的测试框架Mockito.

我们将探索两个解决方案,首先使用A.ArgureCaptor.然后直观doanswer()方法

要了解更多地与Mockito金宝搏官网188be测试,请查看我们的Mockito系列这里

2.回调简介

回调是一段代码,它被作为对方法的参数传递,预计将在给定时间调用(执行)参数

此执行可以在同步回调中​​立即,但通常可能发生在异步回调中的稍后时间。

用于使用回调的常见情况是在服务交互期间,我们需要从服务调用处理响应时

在本教程中,我们将使用服务接口如下所示作为测试用例中的协作者:

公共接口服务{void doation(字符串请求,回调回调);}

在里面打回来论证我们通过了一个班级,它将使用该课程处理响应回复(t回复)方法:

公共接口回调 {void回复(t响应);}

2.1。一个简单的服务

我们也会使用简单的方式服务示例以演示如何传递和调用回调

public void doation(){service.doaction(“我们的请求”,新的回调(){@override public void回复(响应响应){handleresponse(响应);}});}

Handleresponse.方法检查响应是否有效,然后在添加一些数据之前有效回复目的:

私有void Handleresponse(响应响应){if(response.isvalid()){response.setdata(新数据(“成功的数据响应”));}}

为了清楚起见,我们选择不使用Java Lamda表达,但是服务电话也可以更简洁地写作

service.doaction(“我们的请求”,响应 - > Handleresponse(响应));

要了解有关Lambda表达的金宝搏官网188be更多信息这里

3.使用A.ArgureCaptor.

现在让我们看看我们如何使用Mockito来抓住打回来物体使用A.ArgureCaptor.

@test public void givenservicewithvalidresponse_whencallbackreceived_thenprocessed(){actionHandler handler = new actionHandler(服务);handler.doaction();验证(服务).deaction(anystring(),callbackcaptor.capture());回调回调= callbackcaptor.getValue();响应响应=新响应();回叫。[响应);String IndectialMessage =“成功的数据响应”;数据数据= response.getData();assertequals(“应该收到一份成功的消息:”,预期的手术,data.getmessage());}

在这个例子中,我们首先创建一个ActionHandler.在打电话之前做事这个处理程序的方法。这只是我们简单的服务的包装做事方法呼叫这是我们调用回调的地方。

接下来,我们验证做事在我们的模拟服务实例传递中呼吁Anystring()作为第一个论点和CallbackCaptor.Capture()作为第二个,这是我们捕获的地方打回来目的。这getValue()然后可以使用方法返回参数的捕获值。

现在我们有了打回来对象,我们创建一个回复在我们之前默认有效的对象打电话给回复直接方法并断言响应数据具有正确的值

4.使用doanswer()方法

现在我们会看一个用于具有回调的短扣方法的通用解决方案使用Mockito回答对象和doanswer.关闭空白方法的方法做事:

@test public void givenservicewithinvalidresponse_whencallbackreceived_thennotprocessed(){response response = new response();response.setisvalid(false);Doanswer((答案)调用 - > {回叫回调=调用=调用.getargument(1);回叫。[响应);数据数据= response.getData(); assertnull(“无效响应中没有数据:“,数据);返回null;})。当(服务).doaction(anystring(),任何(回调.Class));ActionHandler Handler = New ActionHandler(服务);handler.doaction();}

而且,在我们的第二个例子中,我们首先创建无效回复将在测试后面使用的对象。

接下来,我们设置了回答在我们的模拟服务中,以便做事叫做,我们拦截调用并使用方法抓取方法参数调用.Getargument(1)得到这一点打回来争论

最后一步是创造ActionHandler.并打电话做事这导致了这一点回答被调动。

要了解有关存根无效方法的更多金宝搏官网188be信息这里

3.结论

在这篇简短的文章中,我们在用Mockito测试时涵盖了两种不同的方法来接近测试回调。

与始终一样,此示例可用GitHub项目

通用底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!