激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 怎樣使用PowerMockito 測試靜態方法

怎樣使用PowerMockito 測試靜態方法

2021-10-06 11:10林大蟲子 Java教程

這篇文章主要介紹了使用PowerMockito 測試靜態的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

PowerMockito 測試靜態方法

假如有下面一個類DemoStatic,它里面定義了各種靜態方法,這些靜態方法可能是一些Utilities方法,輔助其它的類。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package mock.demo;
public class DemoStatic {
 public static String sayHello() {
  return "Hello";
 }
 
 public static String saySomething(String word) {
  return word;
 }
 
 public static void sayAgain() {
  System.out.println(getMyWord());
 }
 
 private static String getMyWord() {
  return "This is my word";
 }
}

首先

我們寫一個測試類DemoStaticTest.java, 如下:

?
1
2
3
4
@RunWith(PowerMockRunner.class)
@PrepareForTest({DemoStatic.class})
public class DemoStaticTest {
}

注意在類的前面要加這個annotation:

?
1
@PrepareForTest({DemoStatic.class})

其次

需要在你的項目中加入下面的maven依賴:

?
1
2
3
4
5
6
7
8
9
10
<dependency>
 <groupId>org.powermock</groupId>
 <artifactId>powermock-api-mockito</artifactId>
 <version>1.4.10</version>
</dependency>
<dependency>
 <groupId>org.powermock</groupId>
 <artifactId>powermock-module-junit4</artifactId>
 <version>1.4.10</version>
</dependency>

Mock 無參數的靜態方法

?
1
2
3
4
5
6
7
@Test
public void testMockSayHello() {
 PowerMockito.spy(DemoStatic.class);
 PowerMockito.when(DemoStatic.sayHello()).thenReturn("my hello");
 
 System.out.println(DemoStatic.sayHello());  // my hello
}

Mock 帶參數的靜態方法

?
1
2
3
4
5
6
7
@Test
public void testSaySomething() throws Exception {
 PowerMockito.spy(DemoStatic.class);
 PowerMockito.when(DemoStatic.class, "saySomething", Mockito.anyString()).thenReturn("something to say!");
 
 System.out.println(DemoStatic.saySomething("say hello")); //something to say!
}

Mock private 靜態方法

?
1
2
3
4
5
6
7
@Test
public void testMockPrivate() throws Exception {
 PowerMockito.spy(DemoStatic.class);
 PowerMockito.when(DemoStatic.class, "getMyWord").thenReturn("Nothing to say");
 
 DemoStatic.sayAgain(); //Nothing to say
}

PowerMock 靜態方法模擬問題排查,結果是函數參數問題

問題:靜態方法User.convert()的模擬,未匹配到預期值。

怎樣使用PowerMockito 測試靜態方法

1. 檢查靜態方法的模擬過程

?
1
2
3
4
5
6
7
Mocking Static Method:
// 1.類注解:@PrepareForTest(Static.class) //Static.class 是包含 static methods的類
方法內:
// 2.模擬靜態類(使用PowerMockito.spy(class)模擬特定方法)
PowerMockito.mockStatic(Static.class);
// 3.攔截:設置期望值
Mockito.when(Static.firstStaticMethod(param)).thenReturn(value);

檢查過程沒問題。 直接攔截靜態方法試試

2. 直接攔截靜態方法

怎樣使用PowerMockito 測試靜態方法

驗證通過,模擬靜態方法沒問題。

3. 初步定義為參數問題:函數式參數

?
1
2
// 攔截的方法
<E, R> List<R> queryForList(Object var1, Class<E> var2, Function<E, R> var3);

Function類型的參數精確配置不應該 User::convert 這樣傳。那該怎么傳呢?我在官網和百度扒資料,然而不知道是沒有,還是沒找對。反正,沒找到該怎么解決。

沒辦法,只好先模糊匹配下了

4. 只匹配類型,算解決問題嗎

怎樣使用PowerMockito 測試靜態方法

花了時間不一定有收獲,不花時間也許也有收獲呢。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/west_609/article/details/74906491

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 国色天香综合网 | 欧美成人h版在线观看 | 国产porn在线| 免费观看黄色一级视频 | 91精品国产一区二区三区四区在线 | 亚洲第九十九页 | 91麻豆精品国产91久久久更新资源速度超快 | 逼片| 男人的天堂视频网站 | 国产一区视频免费观看 | 国产精品视频在线观看免费 | 欧美a黄 | 人人舔人人舔 | 欧美福利视频一区二区 | chinese hd xxxx tube | 欧美国产日韩在线观看成人 | 亚洲网在线观看 | 中文字幕一区在线观看视频 | 久久精品国产精品亚洲 | av电影在线观看网站 | 国产色视频免费 | 精品国产一区二区三区四区阿崩 | 欧美大电影免费观看 | 国产亚洲欧美视频 | 国产亚洲美女精品久久久2020 | 久久久久久久久久久国产精品 | 亚洲国产成人一区 | 九九热视频在线 | 免费观看视频在线观看 | 日本欧美一区二区三区在线观看 | 国产美女精品视频 | 欧美一区二区三区成人精品 | 久久久成人一区二区免费影院 | 亚洲成人精品视频 | 91高清在线 | 久久视频精品 | 日韩午夜片 | 女18一级大黄毛片免费女人 | 欧美成人国产va精品日本一级 | 羞羞视频免费观看入口 | 性视频久久 |