package jmockit.sample;
import jmockit.target.OfferPostAction;
import jmockit.target.WinportUrlServiceImpl;
import junit.framework.Assert;
import mockit.Expectations;
import mockit.Mocked;
import org.junit.Test;
/**
* 动态Mock示例,如果在录制阶段new
* Expectations不传入任何参数,那么声明为mock的类型的所有方法将会被mock。这种静态的mock非常局限
* ,有时我们需要的是有条件的mock,在一定条件下mock才生效,在一定条件下却需要调用实际的方法。这时候我们就需要动态的mock。 <li>
* 如果传入的是一个类, 那么该类型的所有方法但不包括父类的方法都会被mock。</li> <li>如果传入的是一个实例,
* 那么该类型的所有方法并包括父类的方法都会被mock。</li>
*
* @author Ginge
*
*/
public class DynamicPartialMocking {
@Mocked
private WinportUrlServiceImpl winportUrlService = null;
private OfferPostAction offerPostAction = new OfferPostAction();
private final String memberId = "test2009";
@Test
public void dynamicallyMockAClass() {
new Expectations(WinportUrlServiceImpl.class) {
{
// 期望被mock的调用,以及被调用时返回的结果
winportUrlService.hasWinport(memberId);
result = false; // 也可以是returns(false);
// 总共可以调用的次数
times = 1;
winportUrlService.getPostedOfferCounts(memberId);
returns(999l);
times = 1;
}
};
// 因此xxx没有匹配到test2009,因此下面的调用中没有被mock
Assert.assertEquals(true, offerPostAction.hasWinport("xxxx"));
// 因为Expectation中声明只有一次mock,因此第一次的结果返回将是false
Assert.assertEquals(false, offerPostAction.hasWinport(memberId));
// 因为Expectation中声明只有一次mock,因此第二次的结果返回将是true
Assert.assertEquals(true, offerPostAction.hasWinport(memberId));
Assert.assertEquals(999l, offerPostAction
.getPostedOfferCounts(memberId));
// Expectations中参数是类的时候,只能mock当前类的方法,而不能mock父类的方法,因此以下的assert语句将会失败
// Assert.assertEquals(1000l,offerPostAction.getPostedOfferCounts(memberId
// ));
}
@Test
public void dynamicallyMockAnInstance() {
new Expectations(new WinportUrlServiceImpl()) {
{
// 期望被mock的调用,以及被调用时返回的结果
winportUrlService.hasWinport(memberId);
result = false; // 也可以是returns(false);
// 总共可以调用的次数
times = 1;
winportUrlService.getPostedOfferCounts(memberId);
returns(999l);
times = 1;
}
};
// 因为Expectation中声明只有一次mock,因此第一次的结果返回将是false
Assert.assertEquals(false, offerPostAction.hasWinport(memberId));
// 因为Expectation中声明只有一次mock,因此第二次的结果返回将是true
Assert.assertEquals(true, offerPostAction.hasWinport(memberId));
// 因为Expectation中的参数是对象,因此整个继承树上的方法,除了java.lang.Object上的方法,都可以mock
Assert.assertEquals(999l, offerPostAction
.getPostedOfferCounts(memberId));
Assert.assertEquals(1000l, offerPostAction
.getPostedOfferCounts(memberId));
}
}
分享到:
相关推荐
struts-junit spring-mock spring-test junit等的javadoc.jar格式的API文档,直接导入Eclipse/MyEclipse/Netbeans等IDE即可实现快速API查询。 包含以下文件: File name -------------------------------------- ...
开源项目-goware-httpmock.zip,httpmock - a simple way to mock 3rd party services in your tests
返回随机mock数据监听mock文件变更, 自动重启服务使用# install dependenciesnpm install# serve with hot reload at localhost:8080npm run dev# start mock-servicenpm run mock项目目录|---- mock // mock文件夹...
vue-cli-plugin-mock 用于本地模拟数据功能的软件包 简单的写作(Express.js风格) 观看文件更改 自动重装模拟服务器 支持esm / cjs样式模块 安装 yarn add vue-cli-plugin-mock 用vue-cli3安装 vue add vue-cli-...
mockjs在线使用安装(纱线或npm) 节点版本: > = 12.0.0 版本号: > = 2.0.0 yarn add mockjs# ornpm i mockjs -Syarn add vite-plugin-mock -D# ornpm i vite-plugin-mock -D例子运行示例 # ts examplecd ./...
Jmockit用法示例,对各种函数(公有、私有、静态、final、无参数、带参数、接口)进行mock的方法
单元测试高级特性--mock模拟网络请求单元测试高级特性--mock模拟网络请求单元测试高级特性--mock模拟网络请求单元测试高级特性--mock模拟网络请求单元测试高级特性--mock模拟网络请求单元测试高级特性--mock模拟网络...
可以用来Mock JAVA代码中的静态方法
Mock 前端虚拟服务 - xe-ajax插件 基于 XEAjax 扩展的前端虚拟服务插件,对于前后端分离开发模式,使用 ajax+mock 就非常有必要。
开源项目-Code-Hex-funcy-mock.zip,funcy-mock generates mock file from interface go file
Laravel开发-laravel-redis-mock 这个Laravel包为您的测试提供了一个redis模拟
React-native-mock-render 一个分叉,用于渲染组件 要求 Node.js 4+ 最新版本的react-native 安装 npm i react-native-mock-render --save-dev /* file-that-runs-before-all-of-my-tests.js */ // This will ...
使用 1. 添加依赖 mvn clean package install (deploy) -Dmaven.test.skip=true 编译安装依赖到本地/远程仓库 <groupId>com.cmt</groupId> <artifactId>dubbo-easy-mock <version>1.1.0 <groupId>org....
C Mock-Google Mock扩展 概述 C Mock是的扩展,允许函数。 仅支持全局(非静态)函数模拟。 这既不是Google Mock的补丁,也不是它的分支。 这只是一组标题,提供了一种在测试中将工具用于具有模拟功能的模拟方法的...
用户行为日志生成脚本
easy to mock data by http server(简单的数据mock服务器)
前端开源库-redux-mock-storeRedux模拟存储,用于测试Redux异步动作创建者和中间件的模拟存储
webpack-mock-middleware 在webpack开发模式,该中间件配合devServer.before提供了一种快速本地mock数据的方案。 mock目录下为数据js,与接口地址相对应,如axios.get('/api/user') -> mock目录下api/user.js 用法 #...
React本机获取模拟 拿出react-native的模拟 为什么选择FetchMock? 没有fetch模拟可以轻松地用于react-native。 因此,我自己创建一个。... const all = Mock.mock({ 'list|2': [{ 'id|+1': 1,
对于更多的浏览器环境,您可以使用来实现实际的浏览器运行时。安装这仅应作为开发依赖项( devDependencies )安装,因为它仅用于测试。 npm i --save-dev jest-canvas-mock设置在jest下的package.json ,创建一个...