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. XmlDocument和XDocument转String

    1:XDocument转String直接使用ToString();XNode里面重写了ToString()方法 2:XmlDocument转String需要写代码 using System; usin ...

  2. iOS源代码管理svn

    01. SVN介绍 SVN 是集中式源代码管理工具 概念: 1> Repository   代码仓库,保存代码的仓库 2> Server       服务器,保存所有版本的代码仓库 3&g ...

  3. Android笔记之WebView加载网页的进度回调

    wv.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, i ...

  4. 磁盘检测SMART工具

    题记: 做过一些关于硬盘的调研任务,当时搜集很多资料,不过现在没有,从网上找了一篇关于SMART的介绍,感觉基本上都是比较全面了. 首先各大硬盘厂商生产的硬盘基本都是会遵循SMART的技术标准的,当然 ...

  5. CentOS6安装DaoCloud加速器

    天朝的网,你又不是不懂.我最爱的红杏最近也用不了了.FUCK GFW. 在这,我们使用DaoCloud的加速器,打开网址 https://dashboard.daocloud.io/mirror 找到 ...

  6. 使VS自动生成代码注释

    1.注释模板位置C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplatesCache 里面有各种脚本的模板 2.找到 ...

  7. 3.06课·········C#语言基础

    Main函数: static void Main(string [] args){ }程序代码需要写在Main函数的花括号内. 一.输出:Console.WriteLine("这是我的第一个 ...

  8. CKeditor插件开发流程(二)SyntaxHighlighter

    CKEditor整合SyntaxHighlighter实现代码高亮显示 1,版本说明 CKEditor:ckeditor_4.0.1_standard.zipSyntaxHighlighter:syn ...

  9. 剑指offer之 奇数偶数数组位置调整且保存顺序不变

    public class Solution { public void reOrderArray(int [] array) { reOrderCore(array,array.length); } ...

  10. Entity Framework在Asp.net MVC中的实现One Context Per Request(转)

    上篇中"Entity Framework中的Identity map和Unit of Work模式", 由于EF中的Identity map和Unit of Work模式,EF体现 ...