在实际的工作中,经常碰到只需要mock一个类的一部分方法,这时候可以用spy来实现。

被测类:

public class EmployeeService {

    public boolean exist(String userName) {
checkPrivateExist(userName);
checkPublicExist(userName);
return true;
} private void checkPrivateExist(String userName) {
throw new UnsupportedOperationException();
} public void checkPublicExist(String userName){
throw new UnsupportedOperationException();
}
}

如果要测试exist方法,需要mock checkPublicExist和checkPrivateExist方法,而不希望mock exist方法

测试类:

@PrepareForTest(EmployeeService.class)
public class EmployeeServiceTestWithPrivateTest extends PowerMockTestCase{ @ObjectFactory
public ITestObjectFactory getObjectFactory() {
return new PowerMockObjectFactory();
} @Test
public void testExist() {
try {
EmployeeService service = PowerMockito.spy(new EmployeeService());
PowerMockito.doNothing().when(service,"checkPrivateExist","powermock");
PowerMockito.doNothing().when(service).checkPublicExist("powermock");;
boolean result = service.exist("powermock");
Assert.assertTrue(result);
Mockito.verify(service).checkPublicExist("powermock");
PowerMockito.verifyPrivate(service).invoke("checkPrivateExist","powermock");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

在测试类中,真实的调用了exist方法。

需要注意的是对private方法的mock

PowerMockito.doNothing().when(service,"checkPrivateExist","powermock");

以及对exist方法调用过程的验证

Mockito.verify(service).checkPublicExist("powermock");
PowerMockito.verifyPrivate(service).invoke("checkPrivateExist","powermock");

用PowerMock spy mock private方法的更多相关文章

  1. 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类

    1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...

  2. powermockito “mock public 方法内部 Private方法的问题”

    我需要测试的方法是 public 方法: public ResponseResult subscribe(SysSubscription sysSubscription) throws JsonGen ...

  3. PowerMock学习(十一)之Mock private methods的使用

    Mock  private methods 就是mock私有方法啦,学到这不难发现,我们其实大部分都是通过反射去完成单元测试的,但是在实际中,某个类中的私有方法,个人不建议使用反射来测试,因为有时候会 ...

  4. mock中测试private方法,不是mock

    Method method = PowerMockito.method(CategoryController.class, "getCategory",List.class);// ...

  5. 用Mockito mock普通的方法

    上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口.这个时候就需要利用Mockito来协助我们完成测试. 当然,你可以选择e ...

  6. PHPUnit单元测试中类protected/private方法测试

    这里首先有一个问题要考虑的是,这类方法是否要被测试? 理论上,这类方法都会被其它public类型的方法调用,只要对那些public的方法做充分的测试,就可以保证这些方法的可靠性,就没有必要再测了.好像 ...

  7. mock static方法

    <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mock ...

  8. 【Thinking in Java】编写构造器时应注意:尽量避免调用其他非private方法

    最近重温了<Thinking in Java>,发现了一个让我为之兴奋的知识漏洞,必须得分享一下. 上一篇的<Java类初始化的过程>的随笔中,那个初始化顺序并不完整.初始化的 ...

  9. 用PowerMockito来mock私有方法(转)

    话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧! 自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我 ...

随机推荐

  1. batch

    %0  当前 batch 文件名  %n  第 n 个命令行参数(1 <= n <= 9)  %*  所有的命令行参数  @echo off echo % echo % if not &q ...

  2. 115开jiang监控

    ぁぁあ0ぁぁあ这里是返回值为1的时候下标2的值ぁぁあ

  3. Linux 系统时间和硬件时间

    linux 的系统时间有时跟硬件时间是不同步的 Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel ...

  4. 在web.xml注册applicationContext.xml配置文件

    概要: Spring配置文件是集成了Spring框架的项目的核心,引擎的开始是:容器先是加载web.xml,接着是applicationContext.xml在web.xml里的注册.以下我们将介绍a ...

  5. C# 发送qq邮箱

    注意: QQ邮箱的简单邮件传输协议(SMTP)使用了SSL加密,必须启用SSL加密.指定端口. QQ邮箱POP3/SMTP服务默认是关闭的,需要开启服务(设置=>账户=>开启服务). QQ ...

  6. could not read symbols: File format not recognized

    arm-linux-gnueabi-readelf工具解决问题 编译一个32位平台的内核时,出现如下错误提示: libschw.a: could not read symbols: File form ...

  7. sphinx全文检索 安装配置和使用

    公司项目刚刚导入大量产品数据,然后发现网站的产品搜索很卡,原本是原生sql的like来做模糊搜索,数据量20W的时候还可以接受,但是上百万就很卡了,所以需要做优化. 经过考虑,打算采用全文检索 sph ...

  8. 理解HTTP幂等性

    转载: 理解HTTP幂等性 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式.无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API ...

  9. JAVA过滤器与SpringMVC拦截器之间的区别

    今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊, 而且看的比较粗浅,没有一个全局而又细致的认识,由于已至 ...

  10. linux进程通信之使用匿名管道进行父子进程通信

    管道:是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称pipe文件. 管道是单向的.先进先出的.无结构的.固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起 ...