PowerMock结合EasyMock
一、Mock静态方法
1、快速总结:
1)在测试用例类级使用@RunWith(PowerMockRunner.class)注释
2)在测试用例类级使用@PrepareForTest(ClassThatContainsStaticMethod.class)
3)使用PowerMock.mockStatic(ClassThatContainsStaticMethod.class)mock这个类的所有方法
4)使用PowerMock.replay(ClassThatContainsStaticMethod.class)切换至replay模式
5)使用PowerMock.verify(ClassThatContainsStaticMethod.class)切换至验证模式
2、例子
假设存在如下类ServiceRegistrator:
public class ServiceRegistrator {
public long registerService(Object service) {
final long id = IdGenerator.generateNewId();
serviceRegistrations.put(id, service);
return id;
}
}
ServiceRegistrator引用了IdGenerator中的静态方法,为了测试registerService方法,我们需要mock IdGenerator.generateNewId()。
IdGenerator实现如下:
public class IdGenerator {
/**
* @return A new ID based on the current time.
*/
public static long generateNewId() {
return System.currentTimeMillis();
}
}
要mock IdGenerator我们在类级使用@PrepareForTest(IdGenerator.class)来注释,并且告诉JUnit使用PowerMock:@RunWith(PowerMockRunner.class)
这两个注释是必须的,没有的话测试会失败。
package com.larry.junit;
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({IdGenerator.class})
public class ServiceRegistratorTest {
@Test
public void testRegistService() {
Long expectId = 12L;
ServiceRegistrator test = new ServiceRegistrator();
//mock
PowerMock.mockStatic(IdGenerator.class);
//expect
EasyMock.expect(IdGenerator.generateNewId()).andReturn(expectId);
//replay
PowerMock.replay(IdGenerator.class);
Long actualId = test.registerService(new Object());
//verify
PowerMock.verify(IdGenerator.class);
org.junit.Assert.assertEquals(expectId, actualId);
}
}
相关推荐
在“powermock源码 详细学习好帮手”这个资源中,你将能够深入理解PowerMock的工作原理,以及它是如何实现这些高级模拟功能的。源码分析是理解任何软件库的关键,特别是对于想要优化测试策略或定制库行为的开发者来...
PowerMock 是一个强大的 Java 测试框架的扩展工具,它允许开发者在单元测试中模拟静态方法、构造函数、最终类和删除静态初始化器等通常难以测试的场景。在 Java 单元测试领域,EasyMock 和 JUnit 是两个常用库,...
**PowerMock学习指南** 在Java开发中,单元测试是一项至关重要的任务,它能确保代码的质量和稳定性。然而,有些复杂的代码结构,如静态方法、final类或方法、构造器私有化等,使得传统的单元测试框架如JUnit和...
通过这个系列的教学,学习者将能够全面掌握PowerMock的各种特性和用法。 1. **入门**:在这个阶段,你会了解到PowerMock的基本概念,包括为什么要使用PowerMock,以及它与easymock和mockito的区别。将介绍如何设置...
在“二、PowerMock入门”中,读者将学习到PowerMock的基本使用场景、一个简单的“Hello World”示例以及重点API的解释。这些内容都是为了帮助读者快速上手PowerMock。 在后续章节中,将会进一步深入讲解PowerMock的...
PowerMock是一个强大的Java单元测试框架,它扩展了如Mockito这样的工具,允许开发者模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器。在Java开发中,有时我们需要对不可Mock的对象进行单元...
赠送jar包:powermock-core-2.0.9.jar; 赠送原API文档:powermock-core-2.0.9-javadoc.jar; 赠送源代码:powermock-core-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-core-2.0.9.pom; 包含翻译后的API...
赠送jar包:powermock-module-junit4-2.0.9.jar; 赠送原API文档:powermock-module-junit4-2.0.9-javadoc.jar; 赠送源代码:powermock-module-junit4-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-...
powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-class...
通过阅读《PowerMock实战手册》,你将学习如何有效地使用这些工具,创建全面的单元测试,提升代码质量。书中的例子和实践将指导你如何解决实际项目中遇到的测试难题,并教会你如何编写出高质量的测试代码,确保你的...
PowerMock Maven Repository是一个重要的开发工具资源库,它主要服务于Java开发者,特别是那些使用PowerMock框架进行单元测试的人员。PowerMock是一个强大的库,允许开发者模拟静态方法、构造函数、删除final修饰、...
PowerMock 是一个强大的Java单元测试框架的扩展,它允许开发者模拟静态方法、构造函数、final 类、enum 和...如果你在IBM DeveloperWorks找到的资源能够提供详细的教程和示例,那么对于学习和应用PowerMock将大有裨益。
赠送jar包:powermock-api-support-2.0.9.jar; 赠送原API文档:powermock-api-support-2.0.9-javadoc.jar; 赠送源代码:powermock-api-support-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-api-support...
赠送jar包:powermock-api-mockito2-2.0.9.jar; 赠送原API文档:powermock-api-mockito2-2.0.9-javadoc.jar; 赠送源代码:powermock-api-mockito2-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-api-...
PowerMock-Mockito-JUnit-1.6.2.zip 是一个包含PowerMock、Mockito和JUnit集成库的压缩包,适用于Java开发环境。这个版本的PowerMock要求使用1.6或更高版本的Java Development Kit (JDK)。下面将详细解释这三个主要...
PowerMock与EasyMock是Java单元测试领域中的两个重要库,它们与JUnit结合使用,能够帮助开发者在测试过程中模拟复杂的对象行为和系统环境。这个压缩包"powermock-easymock-junit-1.5.4.zip"很可能包含了这三个库的...
PowerMock就是这样一款强大的工具,它扩展了EasyMock的功能,允许开发者在单元测试中模拟静态方法、构造器、final类和方法、删除静态初始化器等。本文将详细介绍如何使用PowerMock来Mock静态函数,并探讨其背后的...
除了EasyMock和JUnit,还需要PowerMock的核心库和相关的类加载器,如`powermock-api-easymock`、`powermock-module-junit4`等。 **PowerMock的扩展功能** - 模拟静态方法和类。 - 模拟final类和方法。 - 删除静态...
PowerMock是一个强大的Java单元测试框架,它扩展了其他如EasyMock等工具的功能,允许开发者对静态方法、构造函数、final类和方法...无论你是初学者还是经验丰富的开发者,这个集合都能为你提供有价值的洞察和学习材料。