`

EasyMock, PowerMock 一起mock静态方法 static method

 
阅读更多

在哪下载包就不说了,要下这么几个:

easymock-3.1

easymockclassextension-3.1

powermock-easymock-junit-1.5

 

创建一个待会儿被mock的类, Job

package com.jwu.mock;

import java.util.Random;

public class Job {

	public Job(String name) {
		this.name = name;
	}

	private String name;

	public String getName() {
		return name;
	}

	public static int generateId() {
		return new Random().nextInt(1000);
	}

}
 

再创建一个待会儿需要测试的类,该被测试的类需要用到被mock的类,Person

package com.jwu.mock;

public class Person {

	private int id;
	private String name;
	private Job job;

	public Person() {
		this(1, "noname", new Job("nojob"));
	}

	public Person(int id, String name, Job job) {
		this.id = id;
		this.name = name;
		this.job = job;
	}

	public String getJobName() {
		return job.getName();
	}

	public int getJobId() {
		return Job.generateId();
	}

	public String getJobNamePrefixId() {
		return getJobId() + getJobName();
	}

	public String toString() {
		return "#" + id + ": " + name;
	}
}
 

然后开始写UT类,这里演示了使用EasyMock去mock普通方法,和PowerMock去模拟静态方法:

package com.jwu.mock;

import static org.junit.Assert.assertEquals;

import org.easymock.EasyMock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Job.class)
public class MockStaticTest {

	@Test
	public void testMockMethod() {
		Job job = EasyMock.createMock(Job.class);
		String jobName = "owen";
		EasyMock.expect(job.getName()).andReturn(jobName);
		EasyMock.replay(job);

		Person person = new Person(123, "testName", job);
		assertEquals(person.getJobName(), jobName);
	}

	@Test
	public void testStatic() {
		Job job = EasyMock.createMock(Job.class);
		int expectId = 1234;
		PowerMock.mockStatic(Job.class);
		EasyMock.expect(Job.generateId()).andReturn(expectId);
		PowerMock.replay(Job.class);

		Person person = new Person(123, "testName", job);

		assertEquals(person.getJobId(), expectId);
	}

	@Test
	public void testMix() {
		Job job = EasyMock.createMock(Job.class);
		int expectId = 1234;
		PowerMock.mockStatic(Job.class);
		EasyMock.expect(Job.generateId()).andReturn(expectId);
		PowerMock.replay(Job.class);
		String jobName = "owen";
		EasyMock.expect(job.getName()).andReturn(jobName);
		EasyMock.replay(job);

		Person person = new Person(123, "testName", job);

		assertEquals(person.getJobNamePrefixId(), expectId + jobName);
	}
}
 

 

没有什么特别的,工具和包看一下就会了,真正重要的是怎么去设计UT。

分享到:
评论

相关推荐

    Instant_Mock_Testing_with_PowerMock

    tesunit junit easymock PowerMock

    EasyMock and PowerMock入门PPT

    什么时候需要Mock对象 什么是EasyMock EasyMock的优点和缺点 运行EasyMock需要的资源 EasyMock的基本使用步骤 什么是PowerMock 运行PowerMock需要的资源 PowerMock的扩展功能

    powermock单元测试

    powermock1.4.9.jar和powermock测试静态方法和私有方法的测试代码,大家都知道easymock不能测试这些,配合使用和单元测试更加完善。

    PowerMock\EasyMock的相关资料和文档

    PowerMock\EasyMock的相关资料和文档 自己整理之后的文档

    powermock-easymock-junit-1.5.4.zip

    powermock-easymock-junit-1.5.4.zip

    powermock源码学习 支持模拟静态方法、构造函数、final类和方法、私有方法以及移除静态初始化器的模拟工具

    PowerMock的核心功能在于其能够通过提供定制的类加载器和应用一些字节码操作技巧,实现对静态方法、构造方法、私有方法和final方法的模拟。例如,在进行单元测试时,有时候我们并不希望测试数据进入实际的数据库,...

    powermock-easymock-junit-1.6.1.zip

    powermock-easymock-junit-1.6.1.zip

    EasyMock介绍及安装方法

    不能 mock 类的 static 方法。同样如果 private 方法被调用,只能执行原有的正常代码。 不能 mock 类的一些特殊方法:equals(),toString() 和 hashCode()。原因是 EasyMock 在实现时为每个 class mock 对象提供了内...

    easymock3.1 jar包和powermock1.4.10 jar包(以及附带junit jar包)

    这是单元测试的时候使用easymock和powerMock测试的时候的jar包 找了好久

    单元测试模拟框架PowerMock.zip

    通过提供定制的类加载器以及一些字节码篡改技巧的应用,PowerMock 现了对静态方法、构造方法、私有方法以及 Final 方法的模拟支持,对静态初始化过程的移除等强大的功能。因为 PowerMock 在扩展功能时完全采用和被...

    power mockito学习资料

    PowerMock是一个扩展了其它如EasyMock等mock框架的、功能更加强大的框架。PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等。通过使用自定义...

    PowerMock资料大全(E文)

    PowerMock is a framework that extend other mock libraries such as EasyMock with more powerful capabilities. PowerMock uses a custom classloader and bytecode manipulation to enable mocking of static ...

    easymock 的使用方法简介

    easymock 的使用方法简介easymock 的使用方法简介

    EasyMock的安装与部署所需全部文件.zip

    windows环境部署easymock,有用到的全部文件和安装说明,包换node.js,redis,mongdb,easymock源码

    easymock的使用,含demo

    EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。本文将对 EasyMock 的功能和原理进行介绍,并通过示例来说明如何使用 EasyMock 进行单元测试。 ...

    EasyMock介绍及安装方法含安装方法和所有需要的软件包

    EasyMock 是一个用于生成模拟对象(Mock Object)的类库,主要用于单元测试。它提供了一种简单的方法来模拟接口或类的行为,使得在测试中可以模拟真实环境中的对象。 EasyMock 的主要特点包括: 简单易用:使用 ...

    汪文君powermock实战教学

    Powermock是基于现有的mock框架,easymock和mockito而建立的一个非常强大的框架,它具备easymock和mockito所不具备的一些功能,该系列教材详细的说明了如何使用powermock的所有特性

    easymock-4.2.jar

    EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。 Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂...

    模拟测试辅助工具easyMock.zip

    EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。 Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较...

    easymock3.1最新帮助文档chm格式

    easymock3.1最新帮助文档chm格式

Global site tag (gtag.js) - Google Analytics