`
ginge
  • 浏览: 212600 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jmockit 的使用示例-07私有静态成员Mock

阅读更多

目标测试代码

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模拟静态方法和私有方法的示例

    下面是一段使用PowerMock模拟静态方法和私有方法的示例代码: ```java import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org....

    Jmockit用法示例

    在本文中,我们将深入探讨Jmockit的用法,包括如何模拟不同类型的函数,如公有、私有、静态、final以及接口方法。 ### 1. 模拟公有方法 在单元测试中,我们经常需要隔离被测试代码,以便专注于单个方法的行为。...

    JMockit学习分享

    本文将深入探讨JMockit这一强大的mock框架,它不仅支持模拟私有成员、静态方法,还能自动化地完成mock对象的创建与注入等工作。通过一系列具体示例和概念解析,帮助读者全面掌握JMockit的核心功能及其实现细节。 ##...

    mock学习交流

    除了Mockito,Java社区还提供了其他mock工具,例如PowerMock,它扩展了Mockito的功能,允许我们模拟静态方法、构造函数、final类和方法,甚至私有方法,这些在标准Mockito中通常是不允许的。 在实际项目中,mock...

    powermock单元测试

    在提供的压缩包"powermock+静态和私有方法测试代码"中,很可能包含了一些示例代码,展示了如何使用PowerMock进行这类测试。通过分析这些代码,我们可以更深入地理解PowerMock的工作原理和使用方式。 总的来说,...

    powerMock的测试样例集合

    PowerMock是一个强大的Java单元测试框架,它扩展了其他如EasyMock等工具的功能,允许开发者对静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器进行模拟和测试。在“powerMock的测试样例集合”中,...

    powermock-mockito-junit-1.6.3.zip 当前最新版

    这些工具在Java开发中被广泛用于单元测试和模拟,尤其对于处理静态方法、构造器、final类和方法、私有方法等无法直接进行测试的情况。 PowerMock 是一个扩展了其他Mock框架(如Mockito)的库,它允许开发者模拟那些...

    powermock:单体测试mock工具

    3.包括实例有普通Mock,Mock方法内部new出来的对象,Mock普通对象的final方法,Mock普通类的静态方法,Mock 私有方法 版本库地址 HTTPS协议: https://github.com/ichunming/powermock.git SSH协议: git@github....

    PowerMock实战手册.pdf

    PowerMock主要在以下场景中使用:测试静态方法、私有方法、final类方法、构造函数、静态初始化器,以及模拟对静态类的new操作等。 #### HelloWorld示例 PowerMock的HelloWorld示例通常会展示如何使用PowerMock创建...

    2.集成测试实战1

    然而,Mockito基于动态代理,不能Mock私有、静态方法或构造函数,这在某些情况下可能会造成局限。 - PowerMock:作为Mockito的扩展,PowerMock弥补了Mockito的不足,可以Mock静态方法、私有方法甚至构造函数。但是...

    powermock-mockito-junit-1.6.2.zip

    PowerMock是一个强大的扩展库,它允许开发者模拟静态方法、构造函数、final类和方法、私有方法、删除静态初始化器等,这些都是标准的Java mocking框架如Mockito无法做到的。PowerMock通过字节码操作(Bytecode ...

    jTester使用指南(带书签).pdf

    ### jTester使用指南知识点概述 #### 一、安装与配置jTester **1.1 Maven 用户安装** - **步骤说明**:Maven 用户可以通过在项目的 `pom.xml` 文件中添加 jTester 的依赖来安装 jTester。这一步骤非常简便,只需...

    MockingPresentation:包含 Mockito 和 PowerMock 使用示例

    Mockito 提供了简单易用的 API 来创建和配置模拟对象,而 PowerMock 则扩展了 Mockito 的功能,能够模拟静态方法、构造函数、final 类和方法以及私有方法等。 Mockito 的核心概念包括: 1. **Mock**:模拟对象,...

    powermock-easymock-junit-1.5.4.zip

    PowerMock是一个扩展了其他模拟框架(如EasyMock、Mockito等)的库,它可以模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器等,这些都是传统模拟框架难以处理的情况。在进行单元测试时,有些...

    MockitoExample:Mockito 和 PowerMock 的示例项目

    PowerMock 是基于 Mockito 的扩展,它增加了对静态方法、构造函数、final 类和方法、私有方法、删除静态初始化器等难以模拟情况的支持。这对于测试那些具有紧密耦合或者使用了不可变类、静态方法或反射的代码非常...

    mockito单元测试

    在这个示例中,我们首先创建了`UserService`的实例,然后创建了`UserRepository`的Mock对象,并设置了其`findById`方法的返回值。接着,将Mock对象注入到`UserService`中,并进行了相应的测试。 #### 五、总结 ...

    PowerMock学习指南

    3. **测试规则**:在测试方法中,你可以使用`PowerMockito.mockStatic`来模拟静态方法,或者使用`PowerMockito.when`来定义静态方法的行为。 ### PowerMock核心功能 1. **模拟静态方法**:PowerMock允许你模拟任何...

    PowerMock实战

    在后续章节中,将会进一步深入讲解PowerMock的高级特性,比如如何模拟局部变量(MockLocalVariable),如何模拟静态方法(MockStatic)以及如何使用验证(Verifying)。此外,本书还介绍了如何模拟私有方法、构造...

    powermock-examples-documentationexamples-1.4.10.zip

    它允许开发者模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器等,这些都是传统Mocking工具无法做到的。PowerMock 1.4.10 版本包含了一系列示例,帮助开发者理解和使用其功能。 2. **Mocking ...

Global site tag (gtag.js) - Google Analytics