使用PowerMockito.whennew的时候,注解preparefortest里面的类需要是mock的new代码所在的类的对象

Mock方法内部new出来的对象

测试目标代码:

01

public class ClassUnderTest {

02

03

public boolean callInternalInstance(String path) {

04

05

File file = new File(path);

06

07

return file.exists();

08

09

}

10

}

测试用例代码:

01

@RunWith(PowerMockRunner.class)

02

public class TestClassUnderTest {

03

04

@Test

05

@PrepareForTest(ClassUnderTest.class)

06

public void testCallInternalInstance() throws Exception {

07

08

File file = PowerMockito.mock(File.class);

09

10

ClassUnderTest underTest = new ClassUnderTest();

11

12

PowerMockito.whenNew(File.class).withArguments("bbb").thenReturn(file);

13

14

PowerMockito.when(file.exists()).thenReturn(true);

15

16

Assert.assertTrue(underTest.callInternalInstance("bbb"));

17

}

18

}

说明:当使用PowerMockito.whenNew方法时,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是需要mock的new对象代码所在的类。

Mock方法内部new出来的对象

测试目标代码:

01 public class ClassUnderTest {
02  
03     public boolean callInternalInstance(String path) { 
04  
05         File file = new File(path); 
06  
07         return file.exists(); 
08  
09     
10 }

测试用例代码:

01 @RunWith(PowerMockRunner.class
02 public class TestClassUnderTest {
03  
04     @Test 
05     @PrepareForTest(ClassUnderTest.class
06     public void testCallInternalInstance() throws Exception { 
07  
08         File file = PowerMockito.mock(File.class); 
09  
10         ClassUnderTest underTest = new ClassUnderTest(); 
11  
12         PowerMockito.whenNew(File.class).withArguments("bbb").thenReturn(file); 
13          
14         PowerMockito.when(file.exists()).thenReturn(true); 
15  
16         Assert.assertTrue(underTest.callInternalInstance("bbb")); 
17     
18 }

说明:当使用PowerMockito.whenNew方法时,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是需要mock的new对象代码所在的类。

原文地址:https://www.cnblogs.com/nizuimeiabc1/p/12153148.html

时间: 2024-08-30 05:18:24

使用PowerMockito.whennew的时候,注解preparefortest里面的类需要是mock的new代码所在的类的对象的相关文章

springboot使用ImportResource注解加载spring配置文件(传智播客代码)

接上篇:springboot使用PropertyResource注解读取指定配置文件的属性(传智播客代码)@ImportResource可以加载多个配置文件 DemoApplication.java package com.atguigu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import or

PowerMockito使用详解

一.PowerMock概述 现如今比较流行的Mock工具如jMock,EasyMock,Mockito等都有一个共同的缺点:不能mock静态.final.私有方法等.而PowerMock能够完美的弥补以上三个Mock工具的不足. PowerMock是一个扩展了其它如EasyMock等mock框架的.功能更加强大的框架.PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等.通过使用自定义的类加载器,简化采用的IDE或持续集

PowerMockito使用详解(转)

一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解决这个问题,我们就需要用到Mock工具来模拟这些外部依赖的对象,来完成单元测试.  二.为什么要使用PowerMock 现如今比较流行的Mock工具如jMock.EasyMock .Mockito等都有一个共同的缺点:不能mock静态.final.私有方法等.而PowerMock能够完美的弥补以上三

PowerMock介绍

一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解决这个问题,我们就需要用到Mock工具来模拟这些外部依赖的对象,来完成单元测试.  二.为什么要使用PowerMock 现如今比较流行的Mock工具如jMock.EasyMock .Mockito等都有一个共同的缺点:不能mock静态.final.私有方法等.而PowerMock能够完美的弥补以上三

PowerMock 之进阶学习

模拟局部变量 Mock Local Variable 有返回值得局部变量的模拟! 这里的局部变量没有采取依赖注入的方式,而是采取了一种而是在方法内部 new出一个 EmployeeDao,我们通常都会写这样的代码,平时我们也可能或碰上这样的问题,那么我们怎么去解决这个问题呢! public class EmployeeService { public int getTotalEmployee() { EmployeeDao employeeDao = new EmployeeDao(); ret

PowerMock框架讲解及使用

为什么要使用PowerMock 现如今比较流行的Mock工具如jMock .EasyMock .Mockito等都有一个共同的缺点:不能mock静态.final.私有方法等.而PowerMock能够完美的弥补以上三个Mock工具的不足.PowerMock简介 PowerMock是一个扩展了其它如EasyMock等mock框架的.功能更加强大的框架.PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等.通过使用自定义的类加

架构设计:系统间通信(17)——服务治理与Dubbo 中篇(分析)

(接上文) 2-5.设计模式:代理模式和JAVA对代理模式的支持 2-5-1.典型的代理模式 下面这个类图说明了"代理模式"的典型设计设计结构: 典型的代理模式可用一句话进行概括:外部系统/外部模块要调用某个具体业务的实现A,不能直接进行实调用,而要通过一个代理对象进行间接的调用.典型的dialing模式中有四个角色: Subject:业务接口定义.这个业务接口定义相关实现类的行为.事件等特性. RealSubject:您可以看业务定义的真实实现.设计的原则是:无论何种情况下它并不知道

第16章 过滤器

---------------------------------------------- 注:ActionFilterAttribute类既实现了IActionFilter,也实现IResultFilter接口.是一个抽象类,要求你必须提供一个实现(派生类). 而 AuthorizeAttibute和HandleErrorAttribute,则包含了一些有用的特性,并且可以不必创建派生类进行使用. 注:如果为控制器定义了一个自定义基类,那么运用于基类上的任何过滤器都会影响其派生类. ----

Kotlin:Android世界的Swift

此文摘自InfoQ 原文地址:http://www.infoq.com/cn/news/2015/06/Android-JVM-JetBrains-Kotlin Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函数.操作符重载.字符串模板.它与Java高度可互操作,可以同时用在一个项目中. 按照JetBrains的说法,根据他们多年的Java平台开发经验,他们认为Ja