1. powermock是基于mockito或者easymock,TestNG之上的mock;
2. 提供了对于静态函数,私有函数的mock
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();
}
}
}

powermock, 强力模拟的更多相关文章

  1. PowerMock 简介--转载

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-powermock/ EasyMock 以及 Mockito 都因为可以极大地简化单元测试的书 ...

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

    本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...

  3. FZU 1893 内存管理 模拟

    比赛的时候队友要做这道题…… 他没做出来自己也被误导了…… 也算是个教训 自己还是要有自己的思路…… 又是模拟题…… 网上都是用vector做的 我最近才会stl 怎么会用那么高大上的的东西…… 强力 ...

  4. PowerMock

    EasyMock 以及 Mockito 都因为可以极大地简化单元测试的书写过程而被许多人应用在自己的工作中,但是这 2 种 Mock 工具都不可以实现对静态函数.构造函数.私有函数.Final 函数以 ...

  5. Mockito 库、powermock扩展

    转载:http://blog.csdn.net/kittyboy0001/article/details/18709685 Mockito 简介 Mockito 是目前 java 单测中使用比较流行的 ...

  6. PowerMock学习(七)之Mock Constructor的使用

    前言 我们在编码的时候,总习惯在构造器中传参数,那么在powermock中是怎么模拟带参数构造的呢,这并不难. 模拟场景 我们先模拟这样一个场景,通过dao中的传入一个是布尔类型(是否加载)和一个枚举 ...

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

    转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测 ...

  8. Mockito简介(转)

    Mockito 是目前 java 单测中使用比较流行的 mock 工具.其他还有 EasyMock,JMock,MockCreator,Mockrunner,MockMaker 及 PowerMock ...

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

    原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...

随机推荐

  1. [原创]关于absolute、relative和float的一些思考

    absolute: 元素完全脱离文档流,不占文档流的位置,不使用top.left等属性时,仍然在原文档流位置上(但是不在文档流中,也不占用位置),设置了top.left等之后,向上寻找到第一个非sta ...

  2. MySQL 数据库事物隔离级别的设置

    select @@tx_isolation; //查看隔离级别 set session transaction isolation level read uncommitted; //设置读未提交级别 ...

  3. 九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2489 解决:742 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小. ...

  4. "ORA-01012: not logged on"以及"Connected to an idle instance."解决思路

    今天测试用的ORACLE服务器出现卡顿情况,于是准备重启一下,在运行shutdown指令关闭数据库的时候意外断开连接,后面想再次进入ORACLE服务器启动时便遇见如下报错: 使用sqlplus /no ...

  5. Delphi编译指令说明

    Delphi快速高效的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置. ******** ...

  6. 关于Ninja中上传下载文件

    上传得时候 根据类型来判断一下: 然后下载的时候需要:在url的最后一个/ 后面加上你要下载的类型如/download/app.apk; 下载成功就是app.apk了;

  7. webdriver与JS操作浏览器元素

    1.JQuery的选择器实例 语法 描述 $(this) 当前 HTML 元素 $("p") 所有 <p> 元素 $("p.intro") 所有 c ...

  8. php线程pthread实践

    php有线程吗?----有,但是需要扩展pthreads,扩展方式网上有一堆的教程,这是只做线程demo. file_put_contents(dirname(__FILE__).'/1.txt', ...

  9. tornado源码分析

    初识tornado 首先从经典的helloword案例入手 import tornado.ioloop import tornado.web class MainHandler(tornado.web ...

  10. 使用mongify将sqlserver数据导入到mongodb

    最近需要将sqlserver数据导入到mongodb中,在github上搜了一圈,发现两个项目有点适合 mongify sql2mongodb 先试了下sql2mongodb(有个好名字果然有好处啊) ...