欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

怎樣使用PowerMockito 測(cè)試靜態(tài)方法

 更新時(shí)間:2021年07月12日 11:03:41   作者:林大蟲子  
這篇文章主要介紹了使用PowerMockito 測(cè)試靜態(tài)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

PowerMockito 測(cè)試靜態(tài)方法

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

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";
 }
}

首先

我們寫一個(gè)測(cè)試類DemoStaticTest.java, 如下:

@RunWith(PowerMockRunner.class)
@PrepareForTest({DemoStatic.class})
public class DemoStaticTest {
}

注意在類的前面要加這個(gè)annotation:

@PrepareForTest({DemoStatic.class})

其次

需要在你的項(xiàng)目中加入下面的maven依賴:

  <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 無參數(shù)的靜態(tài)方法

 @Test
 public void testMockSayHello() {
  PowerMockito.spy(DemoStatic.class);
  PowerMockito.when(DemoStatic.sayHello()).thenReturn("my hello");
  
  System.out.println(DemoStatic.sayHello());  // my hello
 }

Mock 帶參數(shù)的靜態(tài)方法

 @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 靜態(tài)方法

 @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 靜態(tài)方法模擬問題排查,結(jié)果是函數(shù)參數(shù)問題

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

1. 檢查靜態(tài)方法的模擬過程

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

檢查過程沒問題。 直接攔截靜態(tài)方法試試

2. 直接攔截靜態(tài)方法

驗(yàn)證通過,模擬靜態(tài)方法沒問題。

3. 初步定義為參數(shù)問題:函數(shù)式參數(shù)

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

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

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

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

花了時(shí)間不一定有收獲,不花時(shí)間也許也有收獲呢。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論