SpringBoot PowerMockito 私有/靜態/方法/屬性

SpringBoot PowerMockito 私有/靜態/方法/屬性

  • 1 PrepareForTest
  • 2 待測試類
  • 3 測試類

1 PrepareForTest

@PrepareForTest 是 PowerMockito 提供的一個注解,用于告訴 PowerMockito 哪些類需要被修改以允許使用 PowerMockito 的功能。

PowerMockito 主要用于修改 Java 類的行為,包括模擬靜態方法、私有方法、構造函數等。但是,由于 Java 類加載器的限制,有些類可能無法直接被修改。因此,需要在測試類中使用 @PrepareForTest 注解來聲明需要修改的類,以便 PowerMockito 能夠正確地加載和修改這些類。

@PrepareForTest 注解可以指定需要修改的類,可以是一個或多個類,也可以是一個包下的所有類。PowerMockito 將會修改這些類的加載器,以確保可以對其進行修改。

2 待測試類

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 測試類

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.pswp.cn/diannao/12284.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12284.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12284.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機畢業設計】基于SSM+Vue的線上旅行信息管理系統【源碼+lw+部署文檔+講解】

目錄 1 緒論 1.1 研究背景 1.2 設計原則 1.3 論文組織結構 2 系統關鍵技術 2.1JSP技術 2.2 JAVA技術 2.3 B/S結構 2.4 MYSQL數據庫 3 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 操作可行性 3.1.3 經濟可行性 3.1.4 法律可行性 3.2系統功能分析 3.2.1管理員功能分析 3.2.…

JavaScript精粹(一)

JavaScript(簡稱為JS)是一種廣泛應用于網頁開發的腳本語言,具有以下幾個主要作用: 網頁交互:JavaScript 可以用于創建動態的網頁效果,例如響應用戶的操作,實現頁面內容的動態更新,以…

Java SE vs Java EE:深入剖析及面試指南

Java 平臺提供了多個版本來滿足不同應用場景的需求,其中最常用的是 Java SE(Standard Edition)和 Java EE(Enterprise Edition)。理解這兩個版本的區別對于任何 Java 開發者都是至關重要的,尤其是在面試過程…

C++字符串細節,面試題06

文章目錄 22. 字符串22.1. 字符數組 vs 字符指針 vs 常量字符指針 vs string22.2. strcpy vs sprintf vs memcpy22.3. strlen vs length vs size vs sizeof22.4. 字符串之間的轉換22.5 其他數據類型與字符串之間的轉換22.6 字符串分割 22. 字符串 22.1. 字符數組 vs 字符指針 …

Spring整合其他技術

文章目錄 Spring整合mybatis思路分析Mybatis程序核心對象分析整合Mybatis 代碼實現 Spring整合Junit修改成警告 Spring整合mybatis 思路分析 Mybatis程序核心對象分析 上面圖片是mybatis的代碼,上述有三個對象,分別是sqlSessionFactory,sqlS…

Linux:配置客戶端自定義autofs服務

Linux:配置客戶端自定義autofs服務 修改autofs的主策略文件 [rootserver200 data]# vim /etc/auto.master# 修改內容如下 /misc /etc/auto.misc # 掛載目錄的上級目錄 /mnt /etc/auto.timinglee --timeout3修改autofs的自定義策略文件 [rootserver200 data]…

數據庫SQL編寫規范-SQL書寫規范整理(SQL語句書寫規范全解-Word原件)

編寫本文檔的目的是保證在開發過程中產出高效、格式統一、易閱讀、易維護的SQL代碼。 1 編寫目 2 SQL書寫規范 3 SQL編寫原則 軟件全套精華資料包清單部分文件列表: 工作安排任務書,可行性分析報告,立項申請審批表,產品需求規格說…

鴻蒙布局Column/Row/Stack

鴻蒙布局Column/Row/Stack 簡介我們以Column為例進行講解1. Column({space: 10}) 這里的space: 10,表示Column里面每個元素之間的間距為102. width(100%),height(100%) 表示寬高占比3. backgroundColor(0xffeeeeee) 設置背景顏色4. padding({top: 50}) 設…

【ARM 嵌入式 C 文件操作系列 20.4 -- 打印 uint64_t 類型的數值】

文章目錄 C代碼中 打印 uint64_t 類型的數值測試效果 C代碼中 打印 uint64_t 類型的數值 為了以16進制方式打印uint64_t類型的數值&#xff0c;可以使用printf函數&#xff0c;配合<inttypes.h>頭文件中定義的宏PRIX64或PRIx64。這些宏確保了無論在哪個平臺上&#xff0…

keepalived雙機熱備超詳細入門介紹

keepalived 一、keepalived入門介紹 1.keepalived簡介 2.keepalived服務的三個重要功能 2.1.管理LVS負載均衡軟件 2.2.實現對LVS集群節點健康檢查功能 2.3.作為系統網絡服務的高可用功能 3.keepalived高可用故障切換轉移原理 4.keepalived安裝及主配置文件介紹 …

如何用Rust獲取本機CPU、內存在Web網頁中顯示?

目錄 一、需求描述 二、具體操作步驟 三、知識點 1、systemstat 2、Actix 一、需求描述 需求&#xff1a; 1、需要使用Rust進行后端開發獲取本機CPU和內存信息&#xff1b; 2、使用WEB框架發布API&#xff1b; 3、然后使用HTML/CSS/JavaScript進行前端開發&#xff0…

MySQL表的增刪查改【基礎部分】

數據表的操作 新增 普通插入 insert into 表名 values(值,值...)注意&#xff1a; 此處的值要和表中的列相匹配 使用’‘單引號或者”“雙引號來表示字符串 mysql> insert into student values(123,zhangsan); Query OK, 1 row affected (0.02 sec)指定列插入 insert …

2024年3月 電子學會 青少年等級考試機器人理論真題五級

202403 青少年等級考試機器人理論真題五級 第 1 題 下圖程序運行后&#xff0c;串口監視器顯示的結果是&#xff1f;&#xff08; &#xff09; A&#xff1a;0 B&#xff1a;1 C&#xff1a;3 D&#xff1a;4 第 2 題 下列選項中&#xff0c;關于74HC595移位寄存器芯片的…

微信小程序開發【Coffee Shopping】(1)

1.環境準備 微信開發者工具&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 前端常用網站集合&#xff1a;http://www.wwp666.cn/ 微信小程序開發文檔&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/quicksta…

數據結構之二叉樹詳解[1]

在前面我們介紹了堆和二叉樹的基本概念后&#xff0c;本篇文章將帶領大家深入學習鏈式二叉樹。 1.預備知識 2.二叉樹結點的創建 3.二叉樹的遍歷 3.1前序遍歷 3.2中序遍歷 3.3 后序遍歷 4.統計二叉樹的結點個數 5.二叉樹葉子結點的個數 6.二叉樹第k層的結點個數 7.總結 …

鴻蒙ArkUI開發:常用布局【相對布局】

相對布局&#xff08;RelativeContainer&#xff09; 相對布局可以讓子元素指定兄弟元素或父容器作為錨點&#xff0c;基于錨點做位置布局必須為RelativeContainer及其子元素設置ID&#xff0c;用于指定錨點信息。未設置ID的子元素不會顯示RelativeContainer ID為“__containe…

增程SUV價格即將崩盤?買車一定要再等等!

文 | AUTO芯球 作者 | 雷歌? 真是“離譜”啊&#xff0c;車圈真是逗比歡樂多&#xff0c; 我這兩天看一個博主連續40多小時開車直播&#xff0c;充電口、油箱蓋全部封死&#xff0c;全程視頻直播沒斷過&#xff0c; 就為了測試這兩天剛上市的星際元ET續航有多遠。 另一個…

Docker 創建網絡

問題&#xff1a; 1.需要將多個容器添加到同一個網絡. 2.docker-compose.yaml 如果不指定&#xff0c;默認會重新創建一個網卡. 創建網卡 docker network create -d bridge mynet ##-d 指定模式&#xff08;默認橋接&#xff09;查看自定義網絡信息 docker inspect mynet…

NSSCTF Web方向的例題和相關知識點(二)

[SWPUCTF 2021 新生賽]Do_you_know_http 解題&#xff1a; 點擊打開環境&#xff0c;是 提示說請使用wLLm瀏覽器訪問 我們可以更改瀏覽器信息&#xff0c;在burp重放器中發包后發現是302重定向&#xff0c;但是提示說success成功&#xff0c;說明 我們修改是成功的&#xff…

HTML特殊字符

特殊字符 有特殊含義的字符成為字符實體 對于有特殊含義的字符,需要通過轉移字符來表示 <span> <br><a href"http://www.atguigu.com">我 愛 前端</a> <br>&amp;amp; 效果