SpringBoot PowerMockito 私有/静态/方法/属性

server/2024/10/19 3:25:48/

SpringBoot PowerMockito 私有/静态/方法/属性

  • 1 PrepareForTest
  • 2 待测试类
  • 3 测试类

1 PrepareForTest

@PrepareForTest 是 PowerMockito 提供的一个注解,用于告诉 PowerMockito 哪些类需要被修改以允许使用 PowerMockito 的功能。

PowerMockito 主要用于修改 Java 类的行为,包括模拟静态方法、私有方法、构造函数等。但是,由于 Java 类加载器的限制,有些类可能无法直接被修改。因此,需要在测试类中使用 @PrepareForTest 注解来声明需要修改的类,以便 PowerMockito 能够正确地加载和修改这些类。

@PrepareForTest 注解可以指定需要修改的类,可以是一个或多个类,也可以是一个包下的所有类。PowerMockito 将会修改这些类的加载器,以确保可以对其进行修改。

2 待测试类

java">package com.xu.test.service.impl;import com.xu.test.service.JunitTestService;
import org.springframework.stereotype.Service;@Service
public class JunitTestServiceImpl implements JunitTestService {private String mockPrivate = "Private";private static String mockStatic = "Static";@Overridepublic String test(String a) {return a.concat(" Mockito");}public void mockMain() {System.out.println(mockPrivate);System.out.println(mockStatic);System.out.println(mockPublic());System.out.println(mockPrivate());System.out.println(mockFinal());System.out.println(mockStatic());}public String mockPublic() {return "PowerMockito Public";}public static String mockStatic() {return "PowerMockito Private";}private String mockPrivate() {return "PowerMockito Private";}public final String mockFinal() {return "PowerMockito Final";}}

3 测试类

java">package com.xu.test;import com.xu.test.service.impl.JunitTestServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;import java.lang.reflect.Field;@RunWith(PowerMockRunner.class)
@PrepareForTest({JunitTestServiceImpl.class, Thread.class})
public class MockTest3 {@Testpublic void testMock1() throws Exception {JunitTestServiceImpl impl = PowerMockito.spy(new JunitTestServiceImpl());PowerMockito.doReturn("PowerMockito Public").when(impl, "mockPublic");PowerMockito.doReturn("PowerMockito Private").when(impl, "mockPrivate");PowerMockito.doReturn("PowerMockito Final").when(impl, "mockFinal");// 私有属性Whitebox.setInternalState(impl, "mockPrivate", "Private-");// 静态属性Field field = JunitTestServiceImpl.class.getDeclaredField("mockStatic");field.setAccessible(true);field.set(field, "newValue");//mock 静态方法PowerMockito.mockStatic(JunitTestServiceImpl.class);PowerMockito.doReturn("PowerMockito Static").when(JunitTestServiceImpl.class, "mockStatic");impl.mockMain();}}

http://www.ppmy.cn/server/42090.html

相关文章

如何利用R包进行主成分分析和可视化

一. 使用R包“FactoMineR”进行主成分分析(PCA) 基本步骤如下: 安装和加载包:如果尚未安装,首先安装“FactoMineR”包,然后加载它: install.packages("FactoMineR")library(FactoM…

设计模式-建造者模式

简介 建造者模式(Builder Pattern)是一种常用的软件设计模式,属于创建型模式的一种。这种模式的主要目的是分离复杂对象的构造和表示。通过这种方式,相同的构造过程可以创建不同的表示。建造者模式通常用于设计一个复杂对象的组成…

C++中Using关键词的三种应用

引入单个名称 将某个单独名字引入到当前域中。不再需要使用作用域限定符:: 例如: using std::string; string s “hello,world”; using声明可以改变派生类对父类成员的访问控制。 例如: class Base{ protected: int n1;…

android apk没有源码如何修改程序

如果您拥有一个APK文件但没有源代码,您可以尝试以下几种方法来进行修改: 反编译APK:使用工具如apktool对APK文件进行反编译,这将为您提供源代码和资源文件。 动态调试:使用调试工具连接设备或模拟器,并动态…

postgreSQL安装配置

安装 在ubuntu界面执行 sudo apt install postgresql安装完成后,切换到postgres (安装过程中自动创建) sudo su - postgres#然后执行psql,进入数据库 psql创建数据库用户 在数据库中执行create命令创建用户,并带有…

音乐的力量

常听音乐的好处可以让人消除工作紧张、减轻生活压力、避免各类慢性疾病等等,其实这些都是有医学根据的。‍ 在医学研究中发现,经常的接触音乐节 奏、旋律会对人体的脑波、心跳、肠胃蠕动、神经感应等等,产生某些作用,进而促进身心…

leetcode 2105. 给植物浇水 II

2105. 给植物浇水 II 题目描述 Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 到 n - 1 。每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐,最初是满的。他们按照以下描述的方式完成浇水…

git 合并commit

操作步骤 合并commit cd xxx/ git checkout a8c0efegfwgtw # 最新commit git reset rhgertheryhg --soft # 最初的commit git status git checkout -b test1 git commit -m "test1" git branch git push origin test1 git tag test1_v0.0.1 git push origin test1_…