目标测试代码
package jmockit.target;
public class StaticAccess {
private static int memberCounts;
private static int getMemberCounts() {
return memberCounts;
}
/**
* 把传入的count和内部定义的私有int类型的memberCounts的值相加,返回相加的结果。
*
* @param count
* @return
*/
public static int sumInternalCounts(int count) {
int myCount = getMemberCounts();
return myCount + count;
}
}
Mock代码
package jmockit.sample;
import jmockit.target.StaticAccess;
import junit.framework.Assert;
import mockit.Expectations;
import org.junit.Test;
/**
* 有时我们需要在测试mock对象前对某些静态成员变量进行初始化的设值,但是这些静态成员变量往往是私有的,有时某些方法的调用中会间接调用静态私有方法。
* 如何对这些静态私有变量或者静态私有方法进行mock呢?以下示例将示范这些用法
*
* @author Ginge
*
*/
public class StaticAccessTest {
@Test
/*
* 对mock类型的静态私有成员变量进行设值的示例
*/
public void privateAccessField() {
// 注意:这里使用了动态部分mock
new Expectations(StaticAccess.class) {
{
// 对私有int类型的memberCounts进行设值
this.setField(StaticAccess.class, "memberCounts", 2);
}
};
Assert.assertEquals(5, StaticAccess.sumInternalCounts(3));
}
@Test
/*
* 对mock类型的静态私有成员方法进行mock的示例
*/
public void privateAccessMethod() {
// 注意:这里使用了动态部分mock
new Expectations(StaticAccess.class) {
{
// 对私有方法进行mock
this.invoke(StaticAccess.class, "getMemberCounts");
result = 2;
}
};
Assert.assertEquals(5, StaticAccess.sumInternalCounts(3));
}
@Test
/*
* 直接对整个静态方法进行mock
*/
public void staticAccessMethod() {
// 注意:这里使用了动态部分mock
new Expectations(StaticAccess.class) {
{
StaticAccess.sumInternalCounts(3);
result = 7;
}
};
Assert.assertEquals(7, StaticAccess.sumInternalCounts(3));
}
}
分享到:
相关推荐
下面是一段使用PowerMock模拟静态方法和私有方法的示例代码: ```java import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org....
在本文中,我们将深入探讨Jmockit的用法,包括如何模拟不同类型的函数,如公有、私有、静态、final以及接口方法。 ### 1. 模拟公有方法 在单元测试中,我们经常需要隔离被测试代码,以便专注于单个方法的行为。...
本文将深入探讨JMockit这一强大的mock框架,它不仅支持模拟私有成员、静态方法,还能自动化地完成mock对象的创建与注入等工作。通过一系列具体示例和概念解析,帮助读者全面掌握JMockit的核心功能及其实现细节。 ##...
除了Mockito,Java社区还提供了其他mock工具,例如PowerMock,它扩展了Mockito的功能,允许我们模拟静态方法、构造函数、final类和方法,甚至私有方法,这些在标准Mockito中通常是不允许的。 在实际项目中,mock...
在提供的压缩包"powermock+静态和私有方法测试代码"中,很可能包含了一些示例代码,展示了如何使用PowerMock进行这类测试。通过分析这些代码,我们可以更深入地理解PowerMock的工作原理和使用方式。 总的来说,...
PowerMock是一个强大的Java单元测试框架,它扩展了其他如EasyMock等工具的功能,允许开发者对静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器进行模拟和测试。在“powerMock的测试样例集合”中,...
这些工具在Java开发中被广泛用于单元测试和模拟,尤其对于处理静态方法、构造器、final类和方法、私有方法等无法直接进行测试的情况。 PowerMock 是一个扩展了其他Mock框架(如Mockito)的库,它允许开发者模拟那些...
3.包括实例有普通Mock,Mock方法内部new出来的对象,Mock普通对象的final方法,Mock普通类的静态方法,Mock 私有方法 版本库地址 HTTPS协议: https://github.com/ichunming/powermock.git SSH协议: git@github....
PowerMock主要在以下场景中使用:测试静态方法、私有方法、final类方法、构造函数、静态初始化器,以及模拟对静态类的new操作等。 #### HelloWorld示例 PowerMock的HelloWorld示例通常会展示如何使用PowerMock创建...
然而,Mockito基于动态代理,不能Mock私有、静态方法或构造函数,这在某些情况下可能会造成局限。 - PowerMock:作为Mockito的扩展,PowerMock弥补了Mockito的不足,可以Mock静态方法、私有方法甚至构造函数。但是...
PowerMock是一个强大的扩展库,它允许开发者模拟静态方法、构造函数、final类和方法、私有方法、删除静态初始化器等,这些都是标准的Java mocking框架如Mockito无法做到的。PowerMock通过字节码操作(Bytecode ...
### jTester使用指南知识点概述 #### 一、安装与配置jTester **1.1 Maven 用户安装** - **步骤说明**:Maven 用户可以通过在项目的 `pom.xml` 文件中添加 jTester 的依赖来安装 jTester。这一步骤非常简便,只需...
Mockito 提供了简单易用的 API 来创建和配置模拟对象,而 PowerMock 则扩展了 Mockito 的功能,能够模拟静态方法、构造函数、final 类和方法以及私有方法等。 Mockito 的核心概念包括: 1. **Mock**:模拟对象,...
PowerMock是一个扩展了其他模拟框架(如EasyMock、Mockito等)的库,它可以模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器等,这些都是传统模拟框架难以处理的情况。在进行单元测试时,有些...
PowerMock 是基于 Mockito 的扩展,它增加了对静态方法、构造函数、final 类和方法、私有方法、删除静态初始化器等难以模拟情况的支持。这对于测试那些具有紧密耦合或者使用了不可变类、静态方法或反射的代码非常...
在这个示例中,我们首先创建了`UserService`的实例,然后创建了`UserRepository`的Mock对象,并设置了其`findById`方法的返回值。接着,将Mock对象注入到`UserService`中,并进行了相应的测试。 #### 五、总结 ...
3. **测试规则**:在测试方法中,你可以使用`PowerMockito.mockStatic`来模拟静态方法,或者使用`PowerMockito.when`来定义静态方法的行为。 ### PowerMock核心功能 1. **模拟静态方法**:PowerMock允许你模拟任何...
在后续章节中,将会进一步深入讲解PowerMock的高级特性,比如如何模拟局部变量(MockLocalVariable),如何模拟静态方法(MockStatic)以及如何使用验证(Verifying)。此外,本书还介绍了如何模拟私有方法、构造...
它允许开发者模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器等,这些都是传统Mocking工具无法做到的。PowerMock 1.4.10 版本包含了一系列示例,帮助开发者理解和使用其功能。 2. **Mocking ...