簡體   English   中英

在課前用jmockit(1.5)模擬靜態方法

[英]Mocking static methods with jmockit (1.5) before class

根據Jmockit教程中的示例,此代碼應該可以解決問題:

@BeforeClass
public static void setUpClass() {
    new MockUp<UtilJndi>(){

      @Mock
      public static String getDirectoryFromContext(Property jndiName) // line 66
             throws DirectoryNotFoundException {
         return "noDirectory";
      }
    };
}

但它顯示:

myclass.java:[66,29]錯誤:非法的靜態聲明

我該如何解決這個問題?

我將添加另一個對我有用的解決方法:

我創建了我的模擬類擴展MockUp:

public static class MockUtilJndi extends MockUp<UtilJndi> {

    public MockUtilJndi() {
        super();
    }

    @Mock
    public static String getDirectoryFromContext(Property jndiName)
            throws DirectoryNotFoundException {
        return "noDirectory";
    }
}

如果你注意到我在構造函數中調用了super()。 根據文檔的原因,如果你調用MockUp構造函數,它將改變目標類中的實現..所以一旦你在你的模擬類構造函數中有這個,你只需要在@BeforeClass注釋方法中創建你的類:

@BeforeClass
public static void setUpClass() {
    new MockUtilJndi();
}

好的,我會將我的評論更新為答案。

首先,錯誤信息非常清楚。 “非法靜態聲明”只是意味着靜態關鍵字被置錯了。 去掉它!

當您嘗試模擬靜態方法時,您可能認為必須同時放置static關鍵字。 但是Mock注釋文檔說:

但是,方法修飾符(包括public,final和even static)不必相同。

這只是意味着,即使不將其聲明為靜態,也可以模擬靜態方法。

嗯......我強烈地感覺到,文檔的措辭有點令人困惑。 顯然,它不是一個選項,但你不能聲明它是靜態的。

暫無
暫無

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

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