读书人

EasyMock, PowerMock 一行mock静态方法

发布时间: 2012-12-24 10:43:14 作者: rapoo

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 {@Testpublic 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);}@Testpublic 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);}@Testpublic 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。

读书人网 >编程

热点推荐