在哪下载包就不说了,要下这么几个:
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。
分享到:
相关推荐
3. 创建Mock:在测试方法中,使用`PowerMockito.mockStatic(Class)`来模拟整个静态类,或者使用`PowerMockito.when(Class.method()).thenReturn(value)`来指定静态方法在特定条件下的返回值。 4. 执行测试:进行正常...
PowerMock是EasyMock的一个扩展,它允许模拟静态方法、构造函数、final类和方法,以及删除静态初始化器。这对于那些不能直接用EasyMock模拟的场景非常有用,例如模拟Java的`java.lang`包中的类。 **运行PowerMock...
3. **模拟静态方法**:使用`PowerMockito.mockStatic(Class<?> clazz)`来模拟静态方法。然后通过`when`和`thenReturn`(或其他方法)来定义静态方法的行为。 4. **模拟私有方法**:首先,需要使用`PowerMockito.spy...
5. 在测试方法中,使用`PowerMockito.mockStatic()`模拟静态方法,`when()`定义期望行为,`thenReturn()`等方法指定返回值。 6. 执行实际的测试代码,并在测试方法后使用`verify()`检查mock对象的行为是否符合预期。...
PowerMock是一个扩展了其他模拟框架(如EasyMock、Mockito等)的库,它可以模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器等,这些都是传统模拟框架难以处理的情况。在进行单元测试时,有些...
PowerMock1.4.10则是Easymock的一个增强版,它扩展了Easymock的功能,允许对静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器等进行模拟。在许多情况下,这些是Easymock无法处理的,但它们在实际...
EasyMock是基础,而PowerMock则在其基础上扩展了更多的功能,使得一些难以模拟的Java特性如静态方法、构造函数、final类和方法、删除静态初始化器等变得可测试。 EasyMock是一个强大的模拟框架,它允许开发者创建...
PowerMock是在easymock和mockito的基础上构建的,旨在提供更多的功能,解决传统mock框架无法处理的一些问题。通过这个系列的教学,学习者将能够全面掌握PowerMock的各种特性和用法。 1. **入门**:在这个阶段,你会...
PowerMock 提供了 `PowerMockito.mockStatic` 方法,允许我们指定静态方法的行为,从而在测试中隔离静态方法的依赖。 3. **构造函数模拟**: 有些情况下,被测试类可能依赖于私有构造函数或不可实例化的类。...
PowerMock的核心功能在于其能够通过提供定制的类加载器和应用一些字节码操作技巧,实现对静态方法、构造方法、私有方法和final方法的模拟。例如,在进行单元测试时,有时候我们并不希望测试数据进入实际的数据库,...
不能 mock 类的 static 方法。同样如果 private 方法被调用,只能执行原有的正常代码。 不能 mock 类的一些特殊方法:equals(),toString() 和 hashCode()。原因是 EasyMock 在实现时为每个 class mock 对象提供了内...
EasyMock通过`expect`方法定义mock对象的行为,`replay`方法启动模拟,`verify`方法检查mock对象的调用是否符合预期。 将EasyMock与JUnit结合,我们可以创建更加复杂的测试场景。例如,当我们测试一个类A,它依赖于...
PowerMock允许我们创建mock的静态方法,从而在测试中控制它们的行为。 2. **mock final类和方法**:final类和方法不能被子类化,也就无法常规地mock。PowerMock可以通过字节码操作来模拟它们。 3. **避免依赖初始...
在单元测试中,可以使用MockStatic来模拟静态方法,以测试依赖于这些方法的代码。 ### Verifying #### 使用场景 验证是一个重要环节,用于检查方法是否按照预期被调用。 #### 业务代码 在编写业务代码时,为了...
通过提供定制的类加载器以及一些字节码篡改技巧的应用,PowerMock 现了对静态方法、构造方法、私有方法以及 Final 方法的模拟支持,对静态初始化过程的移除等强大的功能。因为 PowerMock 在扩展功能时完全采用和被...
在后续章节中,将会进一步深入讲解PowerMock的高级特性,比如如何模拟局部变量(MockLocalVariable),如何模拟静态方法(MockStatic)以及如何使用验证(Verifying)。此外,本书还介绍了如何模拟私有方法、构造...