关键词:如何mock一个类的方法、Expectations
源类清单
/**
* 演示如何mock一个类的方法
* @sina weibo:regbin@tom.com
*/
public class DateUtil {
private int type;
public static final String getCurrentDateStr() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(DateUtil.now());
}
public static final String getCurrentDateStrByFormatType(int type) {
if (type == 1) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return sdf.format(DateUtil.now());
} else {
return DateUtil.getCurrentDateStr();
}
}
public static final Date now() {
return new Date();
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
/**
* 演示如何mock一个类的方法
*/
public class DateUtilTest {
/**
* Mock某个类方法
*/
@Test
public void testGetCurrentDateStr() {
//DateUtil.class,要Mock的类
new Expectations(DateUtil.class) {
{
//要Mock的方法now,其他方法DateUtil.class
DateUtil.now();
//期望方法返回的结果
result = mockDate();
}
};
Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStr());
}
/**
* Mock 某个类方法根据不同参数返回不同值
*/
@Test
public void testGetCurrentDateStrByFormatType() {
new Expectations(DateUtil.class) {
{
DateUtil.getCurrentDateStrByFormatType(anyInt);
result = new Delegate() {
public String getCurrentDateStrByFormatType(int type) {
if (type == 1) {
return "2010/07/22 15:52:55";
} else {
return "2010-07-22 15:52:55";
}
}
};
}
};
Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStrByFormatType(2));
}
public static Date mockDate() {
Calendar c = Calendar.getInstance();
c.set(2010, 6, 22, 15, 52, 55);
return c.getTime();
}
}
Expectations:一个Expectations块是给定测试方法中将会涉及到的mock项中,预期将要被调用的方法或构造函数。一个Expectations可以包含多个预期的要执行方法(mock),但不必包含所有预期会被调用的方法。在Expectations中;除了可以指定预期的方法外,还可以指定方法的参数的精确值或约束行为(满足某个断言);同时Expectations中还可以指定该方法预期的返回值(如果有)或预期抛出的异常。Expectations(.class){}这种方式只会模拟区域中包含的方法,这个类的其它方法将按照正常的业务逻辑运行,上面的例子,定义了一个mock类DateUtil,同时在Expectation中定义了预期会被调用的方法now,以及now方法的返回值,这种方式还有种等价实现方式,使用@Mocked标签
@Test
public void testGetCurrentDateStr(@Mocked(methods="now")DateUtil dateUtil) {
//DateUtil.class,要Mock的类
new Expectations() {
{
//声明要Mock的方法(注:其它方法按照正常的业务逻辑运行)
DateUtil.now();
//期望方法返回的结果
result = mockDate();
}
};
Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStr());
}
NonStrictExpectations:Expectations块里声明的mock方法,是一定要被执行的,如果没有被执行,会认为整个测试case不通过;NonStrictExpectations就没有这个限制,看例子:
@Test
public void testGetCurrentDateStr(@Mocked(methods="now")DateUtil dateUtil) {
//DateUtil.class,要Mock的类
new NonStrictExpectations() {
{
//声明要Mock的方法(注:其它方法按照正常的业务逻辑运行)
DateUtil.now();
//期望方法返回的结果
result = mockDate();
DateUtil.getType();
result = 1;
}
};
Assert.assertEquals("2010-07-22 15:52:55", DateUtil.getCurrentDateStr());
}
DateUtil.getType()在后面的断言没用被调用,但也不会出错,但是如果把NonStrictExpectations换成Expectations,就会出错,在Expectations情况必须把
DateUtil.getType();
result = 1;
给删除掉,上述就是二者的区别
分享到:
相关推荐
直接配置即可.<br><br>以下是一些相关说明.<br><br><br>数据库脚本<br>create table HUBO_USER<br>(<br> ID VARCHAR2(32) not null,<br> NAME VARCHAR2(100),<br> BIRTHDAY DATE,<br> PASSWORD VARCHAR2(100),<br> ...
可以用来Mock JAVA代码中的静态方法
<br>saaj.jar<br>serializer-2.7.0.jar<br>servlet.jar<br>servlet-api.jar<br>slf4j-api-1.3.1.jar<br>slf4j-simple-1.3.1.jar<br>smtp.jar<br>soap.jar<br>spring.jar<br>spring-mock.jar<br>standard.jar<br>...
aop.jar<br>spring-beans.jar<br>spring-context.jar<br>spring-core.jar<br>spring-dao.jar<br>spring-hibernate.jar<br>spring-jdbc.jar<br>spring-mock.jar<br>spring-orm.jar<br>spring-remoting.jar<br>spring-...
节俭的模拟 用于模拟节俭服务的轻量级Java单元测试库特征初始化节俭模拟服务器,无需任何预定义节俭IDL,仅需一个端口动态绑定节俭接口对其响应可配置的响应延迟支持将不同的节俭服务中的不同接口绑定到一台服务器...
>RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、...
Dear 'Ajax in Action' Readers,<br><br>This zip file gathers together the source code for the... Your feedback is welcome.<br><br>Regards,<br><br>Dave Crane<br>Gloucestershire UK<br>November 2005 <br><br>
这个框架的作用 在自动测试中,针对dubbo接口进行mock的框架 ... <artifactId>dubbo-easy-mock</artifactId> <version>1.1.0</version> <exclusions> <exclusion> <groupId>org.apache.dubbo</grou
1、应用UNIX的fork()等系统调用,编写一个c程序具有以下功能:<br> a) 实现Shell的基本功能,包括有:打印提示符; 接受和分析命令行(滤去无效的空格、tab符号以及换行符等);执行命令(要有出错处理;输入exit...
正如其名,在单元测试时,CUT(Code Under Test ,被测试代码)可能会依赖其他代码,可以使用JMockit API来mock被依赖的代码,从而进行隔离测试。 JMockit有两套API,mock API用来进行mock测试;mock-up API用来...
<module>orion-protocol</module> 网络通信协议包 <module>orion-ribbon</module> 负载均衡算法 <module>orion-archer</module> 远程服务调度框架 <module>orion-monitor</module> 链路监控 <module>orion-...
Jmock Mock 没有接口的类 很方便使用
地位安装专家< dependency> < groupId>org.rarefiedredis.redis</ groupId> < artifactId>redis-java</ artifactId> < version>0.0.5</ version></ dependency>用法去做线程安全RedisMock对象本身是完全线程安全的。...
jmockit资料,关于jmockit的具体使用方式,以及不同方法的详解。
TemplateRef 在介绍 TemplateRef 前,我们先来了解一下 HTML 模板元素 – <template> 。模板元素是一种机制,允许包含加载页面时不渲染,但又可以随后通过 ... <span>I am span in mock template</span> </s
一个简单的解决方案,通过托管的将的简单性与可更新的内容结合在一起 入门 首先,克隆项目并为以下项添加ENV: CONTENTFUL_ACCESS_TOKEN="<contentful>" CONTENTFUL_SPACE="<contentful>" CONTENTFUL_MOCK_ID="...
< groupId>io.quarkiverse.mockk</ groupId> < artifactId>quarkus-junit5-mockk</ artifactId> < version>0.2.0</ version> < scope>test</ scope> </ dependency> 如果您使用gradle: dependencies { ...
Mockmail是一个简单的JavaMail提供程序,可让您防止使用实际传输方式发送电子邮件,这在我们测试应用程序时非常有用。 有提供程序可以将消息打印到系统控制台或文件中。 如何安装 如果您将Maven用作依赖项管理器,则...
httpd-mock [-c, --config <path>] [-O, --output] [-p <port>] [-r <rootpath>] 如果您提供的配置文件和命令行参数发生冲突,这些参数将被覆盖。 配置文件 包含以下结构的 JSON 文件: { "serverRootPath" : "./...
用法包括行家依赖< dependency> < groupId>io.github.kvlabs.filemock</ groupId> < artifactId>core</ artifactId> < version>1.0.0</ version></ dependency>< dependency> < groupId>io.github.kvlabs.filemock&...