原!!junit mockito 自定义参数匹配 -- ArgumentMatcher
前两天写单元测试的时候,发现一个dao对象 mock成功了,但是调用该dao对象的某个方法时,并没有按照设定的值返回,而是返回null。
但是记得之前也都是这么写没有碰到问题,直接mock对象,调用方法,按照设定返回。
问题具体描述如下:
service方法及test方法如下:
//某service的方法
public void updateConfId(String confId, String businessId) {
CdrCommonInfo cdrCommonInfo = new CdrCommonInfo();
cdrCommonInfo.setConfId(confId);
cdrCommonInfo.setBusinessId(businessId);
iSmsSendDao.updateCdrVoiceConfId(cdrCommonInfo);
}
//dao层的方法
public interface ISmsSendDao {
int updateCdrVoiceConfId(CdrCommonInfo cdrCommonInfo);//CdrCommonInfo 为自己定义的对象
} //上述service的 updateConfId 方法的测试方法如下,用下面这种方法写的test,不会按照预定的返回1
@Test
public void updateConfIdTest() {
CdrCommonInfo cdrCommonInfo = new CdrCommonInfo();
cdrCommonInfo.setConfId("0");
cdrCommonInfo.setBusinessId("0");
Mockito.doReturn(1).when(ISmsSendDaoMock ).updateCdrVoiceConfId(cdrCommonInfo);//ISmsSendDaoMock 为 mock的ISmsSendDao 对象
voiceServiceImp.updateConfId("0", "0");
}
//改过之后 用argThat(new isCdrCommonInfo()),可以按照预定返回1
@Test
public void updateConfIdTest() {
Mockito.doReturn(1).when(spyISmsSendDao)
.updateCdrVoiceConfId(argThat(new isCdrCommonInfo()));
voiceServiceImp.updateConfId("0", "0");
} 其中对象 isCdrCommonInfo 定义如下:
public class isCdrCommonInfo extends ArgumentMatcher<CdrCommonInfo> {
public boolean matches(Object cdrCommonInfo){
if(cdrCommonInfo instanceof CdrCommonInfo)
return true;
else
return false;
}
}
原因 个人认为如下:
updateConfIdTest()方法中 Mockito.doReturn(1).when(ISmsSendDaoMock ).updateCdrVoiceConfId(cdrCommonInfo) 创建的cdrCommonInfo对象,不等价于service 中updateConfId()方法中new出来的cdrCommonInfo对象,或者说mockito 不认为这两个是相同的参数
因此ISmsSendDaoMock 不能返回预设的参数值。
参考博文1:http://blog.sina.com.cn/s/blog_6176c38201014jrk.html
参考博文2:http://blog.csdn.net/zhangxin09/article/details/42422643
写博客的时候,试着试着,发现原来这样子也可以!
@Test
public void updateConfIdTest() {
//这样写也可以,就不用定义isCdrCommonInfo对象
Mockito.doReturn(1).when(spyISmsSendDao)
. updateCdrVoiceConfId((CdrCommonInfo) Mockito.any());
// 或者 (CdrCommonInfo) Mockito.anyObject()
voiceServiceImp.updateConfId("0", "0");
}
那么问题来了。。。ArgumentMatcher 这个有什么更好的用处么??待续。。。
原!!junit mockito 自定义参数匹配 -- ArgumentMatcher的更多相关文章
- JUnit + Mockito 单元测试
原 JUnit + Mockito 单元测试(二) 2015年01月05日 17:26:02 sp42a 阅读数:60755 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- JUnit + Mockito 单元测试(二)
摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...
- JUnit + Mockito 单元测试(二)(good)
import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...
- Mockito自定义verify参数Matcher
在TDD开发中,也许我们会遇见对一些重要的无返回值的行为测试,比如在用户的积分DB中增加用户的积分,这个行为对于我们的业务具有重要的价值,所以我们也希望能测试覆盖这部分业务价值.这个时候我们就得使用m ...
- Junit mockito解耦合测试
Mock测试是单元测试的重要方法之一. 1.相关网址 官网:http://mockito.org/ 项目源码:https://github.com/mockito/mockito api:http:/ ...
- Mockito 2 参数匹配器
Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值.有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers). 请参考下面的 ...
- EassyMock实践 自定义参数匹配器
虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了.easymock为此提供了I ...
- ASP.NET Core 中的SEO优化(3):自定义路由匹配和生成
前言 前两篇文章主要总结了CMS系统两个技术点在ASP.NET Core中的应用: <ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存> <ASP.NET ...
- SpringMVC中的自定义参数绑定案例
由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型.所以需要自定义参数绑定.前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适 ...
随机推荐
- DDR 复位
将FPGA代码和实际的数字电路对应起来. always @ (negedge clk_ref_200) begin if(ddr3_init_done) 'b10) 'b10 ...
- Visual Studio 环境配置
一.Productivity Power Tools 1.安装了之后有垂直的分隔线,取消 2.高亮选中匹配的代码 ① VS 2012 3.高亮当前的Tab选项卡
- java 读写文件常用方法
package study.bigdata; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; ...
- IP代理软件
IP代理软件 IP代理软件就是通过第三方网络协议传输数据的一种加密软件:跟VPN,代理服务器原理一样,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通 过这个服务与另一个网络终端(一般为服务器 ...
- makefile的选项LDFLAGS和LIBS的区别
LDFLAGS是选项,LIBS是要链接的库.都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么. 网上不难搜索到上面这段话.不过“告诉ld怎么吃”是什么意思呢? 看看如下选项: LDF ...
- 【ATX学习大纲】【ATX基于uiautomator2+Python学习】之Android自动化
github学习地址:https://github.com/openatx/uiautomator2 <_io.TextIOWrapper name='<stderr>' mode= ...
- android Bitmap用法总结(转载)
Bitmap用法总结1.Drawable → Bitmappublic static Bitmap drawableToBitmap(Drawable drawable) {Bitmap bitmap ...
- C++ 抽象类二(抽象类的基本语法)
//抽象类的基本语法 #include<iostream> using namespace std; /* 有关多继承的说明 被实际开发经验抛弃的多继承 工程开发中真正意义上的多继承是几乎 ...
- eclipse 下安装 lombok.jar
lombok是一个java 开发插件,可以用来简化代码, 1. 下载lombok.jar https://projectlombok.org/download 2 将lombok.jar文件放在ecl ...
- 目标跟踪之卡尔曼滤波---理解Kalman滤波的使用预测
Kalman滤波简介 Kalman滤波是一种线性滤波与预测方法,原文为:A New Approach to Linear Filtering and Prediction Problems.文章推导很 ...