簡體   English   中英

在最終(實用程序)類中模擬私有靜態方法

[英]Mocking private static method in a final (utility) class

有沒有一種方法可以模擬私有方法getMessage()來測試以下類?

我已經嘗試過使用jUnit + Mockito + PowerMock,但是找不到方法(無需修改源代碼或進行反射更改)。

任何想法 ?

public final class One {
    public static String met1() {
        return getMessage();
    }
    private static String getMessage() {
        return "ciao";
    }
    private One() {
        // Empty
    }
}

PowerMockito將讓您模擬該類的所有靜態方法,但是您需要確保您的met1方法仍然調用真實方法:

@RunWith( PowerMockRunner.class )
@PrepareForTest( One.class )
public class OneTest
{
  @Test
  public void testOne()
  {
    PowerMockito.mockStatic( One.class );
    try
    {
      PowerMockito.when( One.met1() ).thenCallRealMethod();
      Method getMessage = PowerMockito.method( One.class, "getMessage" );
      PowerMockito.when( getMessage.invoke( null ) ).thenReturn( "test" );
    }
    catch ( Exception e )
    {
      e.printStackTrace();
    }
    assertEquals( "test", One.met1() );
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM