`
ginge
  • 浏览: 211846 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jmockit 的使用示例-05动态部分mock

 
阅读更多
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));

	}

}

 

分享到:
评论
2 楼 highriver 2011-12-30  
确实不一致。麻烦解释一下。
1 楼 chenjuan730 2011-09-16  

这一条执行结果和预期不一致??

相关推荐

    Android-okhttp-json-mock帮助你为Okhttp和Retrofit模拟json格式的数据

    使用"Android-okhttp-json-mock",你可以创建一个本地的mock服务器,这个服务器会响应你定义的特定URL,返回你想要的json数据。这在单元测试、集成测试或者在没有网络环境时都非常有用。你可以设置不同的HTTP方法...

    Object-CMock objects for Objective-C在Objective-C中使用Mock对象的实践

    本项目将介绍如何使用Objective-C的测试框架和第三方库来创建和使用Mock对象,并提供一些示例代码。 **适用人群:** - Objective-C开发者,特别是那些进行单元测试的开发者。 - 对软件测试和单元测试有一定了解,但...

    struts-junit spring-mock spring-test junit的javadoc.jar文档

    struts-junit spring-mock spring-test junit等的javadoc.jar格式的API文档,直接导入Eclipse/MyEclipse/Netbeans等IDE即可实现快速API查询。 包含以下文件: File name -------------------------------------- ...

    xe-ajax-mock1.4.5.js

    4. **动态切换Mock和真实服务**:在开发过程中,可以方便地在mock模式和真实请求模式之间切换,便于调试和部署。 此外,`xe-ajax-mock`还可能支持以下特性: - **自定义处理器**:允许开发者定义自定义的处理函数...

    开源项目-goware-httpmock.zip

    使用 `httpmock-master` 文件中的源代码,开发者可以深入学习如何配置和使用 HttpMock。该项目通常包含示例代码、文档和测试用例,这些都是理解和掌握 HttpMock 功能的关键资源。 总的来说,Goware-HttpMock 是一个...

    vue-cli-plugin-mock:vue-cli3插件模拟

    vue-cli-plugin-mock 用于本地模拟数据功能的软件包 简单的写作(Express.js风格) 观看文件更改 自动重装模拟服务器 支持esm / cjs样式模块 安装 yarn add vue-cli-plugin-mock 用vue-cli3安装 vue add vue-cli-...

    vite-plugin-mock:vite.use模拟插件的模拟插件

    mockjs在线使用安装(纱线或npm) 节点版本: &gt; = 12.0.0 版本号: &gt; = 2.0.0 yarn add mockjs# ornpm i mockjs -Syarn add vite-plugin-mock -D# ornpm i vite-plugin-mock -D例子运行示例 # ts examplecd ./...

    Laravel开发-laravel-redis-mock

    在Laravel框架中,Redis是一种常用的缓存和队列驱动,它提供了高性能的数据存储和检索功能。然而,在进行单元测试时,直接与...在进行Laravel项目开发时,尤其是在涉及Redis操作的部分,推荐使用此包来提升测试质量。

    gmall2020-mock-db-2021-11-14.jar

    gmall2020-mock-db-2021-11-14.jar

    前端开源库-loglevel-plugin-mock

    4. **易于集成**:由于loglevel-plugin-mock是基于loglevel设计的,所以它能无缝地与已使用loglevel的项目结合。只需要简单的配置,就可以让测试环境的日志行为符合预期。 在实际项目中,我们可以通过以下步骤来...

    JMOCKIT mock 静态方法 单元测试

    可以用来Mock JAVA代码中的静态方法

    Node.js-简单的数据mock服务器

    本篇文章将深入探讨如何使用Node.js来创建一个简单的数据Mock服务器。 首先,我们需要安装Node.js环境,它是搭建Mock服务器的基础。确保你的系统上已经安装了最新版本的Node.js,如果没有,可以访问...

    前端开源库-redux-mock-store

    为了解决这个问题,开发者通常会使用像`redux-mock-store`这样的模拟存储库。 `redux-mock-store`是一个专门为Redux设计的模拟存储,它的主要目的是简化对Redux应用的单元测试和集成测试。它允许你在不实际部署完整...

    react-native-mock-render:react-native-mock的一个分叉

    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 ...

    开源项目-Code-Hex-funcy-mock.zip

    下面我们将深入探讨funcy-mock的工作原理、应用场景以及如何使用它。 首先,让我们理解Go语言中的接口。在Go中,接口是一组方法签名的集合,任何类型只要实现了接口所定义的所有方法,就被称为实现了该接口。接口...

    dubbo-easy-mock:针对Dubbo接口的Mock解决方案

    使用 1. 添加依赖 mvn clean package install (deploy) -Dmaven.test.skip=true 编译安装依赖到本地/远程仓库 &lt;groupId&gt;com.cmt&lt;/groupId&gt; &lt;artifactId&gt;dubbo-easy-mock &lt;version&gt;1.1.0 &lt;groupId&gt;org....

    xe-ajax-mock1.5.7.js

    xe-ajax-mock也兼容fetch API,这意味着开发者可以使用fetch语法进行数据请求,并同样能得到模拟数据的响应。 最后,"xe-mock"这个标签可能是指xe-ajax-mock插件本身,或者是与之相关的其他模拟工具或框架。它可能...

    mock-service-demo:本地mock服务器方案

    返回随机mock数据监听mock文件变更, 自动重启服务使用# install dependenciesnpm install# serve with hot reload at localhost:8080npm run dev# start mock-servicenpm run mock项目目录|---- mock // mock文件夹...

    Better-mock:从Mockjs分叉,生成随机数据和拦截ajax请求。 支持小程序

    -mock fork自 ,使用方法和Mock.js一致,用于javascript模拟数据生成,它可以拦截XHR和fetch请求,并返回自定义的数据类型。并且还支持主流小程序(微信,支付宝) ,头条,百度)。 为什么有Better-Mock? Mock....

    gmall2020-mock-log-2020-04-01.jar

    用户行为日志生成脚本

Global site tag (gtag.js) - Google Analytics