powermock, 强力模拟

1. powermock是基于mockito或者easymock,TestNG之上的mock;

2. 提供了对于静态函数,私有函数的mock

3. 下载地址:https://github.com/powermock/powermock/wiki/Downloads

4. 通过mock价值是直接使用的类;因为只有mock返回的代理实例才会有“预期”行为。反之,如果一个模拟的类是在测试代码中间接被使用,则mock失效,如果你无法把mock的实例(对象代理)传递给测试场景中需要使用到的内容。比如测试代码是topTask,Platform,Platform中内部通过调用RuleService来进行获取规则数据,Platform并没有提供接口为RuleService赋值,那么你即使模拟了RuleService来获取某个规则数据,无效,因为Platform中使用的实例和mock实例是两个实例。

上代码:

基类

public class ClassA {

public boolean getResult() {

return false;

}

public int caculatePublic(int a, int b) {

return caculate(a, b);

}

private int caculate(int a, int b) {

return a + b;

}

public static int getValue() {

return 1;

}

}

测试类:

import org.junit.Test;

import org.junit.runner.RunWith;

import org.powermock.core.classloader.annotations.PrepareForTest;

import org.powermock.modules.junit4.PowerMockRunner;

import static org.junit.Assert.*;

import static org.powermock.api.mockito.PowerMockito.*;

/**

* @author Lorry

*

*/

@RunWith(PowerMockRunner.class)

@PrepareForTest(ClassA.class)

public class TestClassA {

@Test

public void test() {

try {

ClassA ca = mock(ClassA.class);

assertFalse(ca.getResult());

when(ca.getResult()).thenReturn(true);

assertTrue(ca.getResult());

} catch (Exception e) {

e.printStackTrace();

fail();

}

}

@Test

public void testStatic() {

assertEquals(1, ClassA.getValue());

mockStatic(ClassA.class);

when(ClassA.getValue()).thenReturn(10);

assertEquals(10, ClassA.getValue());

}

//@Test

public void testPrivate() {

try {

//ClassA ca = spy(new ClassA());

//assertEquals(3, ca.caculatePublic(1, 2));

//when(ca.caculatePublic(Mockito.anyInt(), Mockito.anyInt())).thenCallRealMethod();

//when(ca, "caculate", 1, 2).thenReturn(99);

//assertEquals(99, ca.caculatePublic(1, 2));

} catch (Exception e) {

e.printStackTrace();

fail();

}

}

}

时间: 2024-10-27 06:08:55

powermock, 强力模拟的相关文章

FZU 1893 内存管理 模拟

比赛的时候队友要做这道题…… 他没做出来自己也被误导了…… 也算是个教训 自己还是要有自己的思路…… 又是模拟题…… 网上都是用vector做的 我最近才会stl 怎么会用那么高大上的的东西…… 强力模拟一波内存…… 反正只有100的大小 随意遍历…… 模拟都做不出来 只能说明真的方了…… 只要心态稳定 模拟都是水题…… 1 #include<stdio.h> 2 #include<string.h> 3 int memory[102]; 4 int room[102]; 5 in

简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一点简要说明:Mockito其实已经可以满足大部分的需求,但是它的实现机制是使用cglib来动态创建接口的类的实例.但是这种实现方式不能用于构造函数和静态函数,因为那需要使用类的字节码(比如使用javassist). 所以我们才需要结合使用PowerMock. 1. mock构造函数, 如果有代码没有

PowerMock 简介--转载

原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-powermock/ EasyMock 以及 Mockito 都因为可以极大地简化单元测试的书写过程而被许多人应用在自己的工作中,但是这 2 种 Mock 工具都不可以实现对静态函数.构造函数.私有函数.Final 函数以及系统函数的模拟,但是这些方法往往是我们在大型系统中需要的功能.PowerMock 是在 EasyMock 以及 Mockito 基础上的扩展,通过定制类加载器等技术,Po

PowerMock+Junit测试小记

intelli J开发工具,单元测试,利用Powermock模拟从数据库获取数据,还有测试验证私有变量的值. 模拟数据,因为不可能每次测试都要连接数据库,并且准备数据也很麻烦,所以利用Powermock来模拟数据获取,来测试程序逻辑单元的正确性.实例代码如下:List<_Agv> listAgvs = // 此处是从固定文件获取数据,并返回list;PowerMockito.when(T_Agv.getAllAgv()).thenReturn(listAgvs);// 这里T_Agv.getA

单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测试Junit实例Mockito 更多 个人分类: 单元测试 推荐一个新手学习Junit4的博客地址:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html        点击打开链接 一.单元测试 单元测试概念: 所谓MT(M

Mockito简介(转)

Mockito 是目前 java 单测中使用比较流行的 mock 工具.其他还有 EasyMock,JMock,MockCreator,Mockrunner,MockMaker 及 PowerMock. 项目地址:https://code.google.com/p/mockito/ powermock 简介 EasyMock 以及 Mockito 都因为可以极大地简化单元测试的书写过程而被许多人应用在自己的工作中,但是这两种 Mock 工具都不可以实现对静态函数.构造函数.私有函数.Final

使用强大的 Mockito 测试框架来测试你的代码

原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine 这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例 1. 预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试. 如果你不熟悉 JUnit,请查看下面的教程: www.vogella.com/tutorials/J- 2. 使用mock对象来进行测试 2.1. 单元测

单元测试实践(SpringCloud+Junit5+Mockito+DataMocker)

网上看过一句话,单元测试就像早睡早起,每个人都说好,但是很少有人做到.从这么多年的项目经历亲身证明,是真的. 这次借着项目内实施单元测试的机会,记录实施的过程和一些总结经验. 项目情况 首先是背景,项目是一个较大型的项目,多个团队协作开发,采用的是SpringCloud作为基础微服务的架构,中间件涉及Redis,MySQL,MQ等等.新的起点开始起步,团队中讨论期望能够利用单元测试来提高代码质量.单元测试的优点很多,但是我觉得最终最终的目标就是质量,单元测试代码如果最终没有能够提高项目质量,说明

使用PowerMock模拟私有字段和私有方法

要模拟的类: public class PrivateObject { private String privateString; public PrivateObject(String privateString) { this.privateString = privateString; } private String getPrivateString() { return this.privateString; } } 使用PowerMock模拟: // 类实例(class instan