2014-04-17 79 views
0

我有一個類:的Mockito靜態函數模擬

class Abc 
{ 
    public static int fun() { 
      // some stuff 
      return 5; 
    } 
} 

我有另一個類:

class Pqr 
{ 
    public int funToTest() { 
      return Abc.fun(); 

    } 
} 

我測試此使用的Mockito如下:

class PqrTest { 
    public int testFunToTest() { 
      Abc ob = Mockito.mock(Abc.class); 
      Mockito.when(ob.fun()).thenReturn(12); 
    } 
} 

現在開始測試樣這工作正常。但由於fun()是一個靜態方法,我不認爲它應該通過一個對象調用。 如何在不調用fun()方法使用mockito的實際實現的情況下返回12。 另外我不想通過Abc類的模擬對象調用fun(),就像我上面所做的那樣。

+2

如果你真的想模擬一個靜態方法,你可以使用PowerMock(這擴展了EasyMock和Mockito)。 – Chris311

回答

1

想要實現的目標可以使用類似PowerMock這樣的工具。

與此同時,您應該意識到,從測試的角度來看,它存在簡單「錯誤」的代碼。如果是這種情況,那麼正確的做法是更改代碼直到測試變得簡單。大多數情況下,您會發現代碼通過此更改變得「更好」:減少錯誤,更易於理解維護,更易於使用。

+0

所以這意味着它不可能使用mockito來完成。好的。爲什麼你認爲這個代碼是錯誤的測試透視???。也可以建議我學習Mockito一些很好的鏈接。 –

+0

測試需要能夠改變所有必要的事情來模擬您希望看到代碼生存的情況。所以如果你有全局變量或函數('public final static'),並且你需要在測試期間改變它們的行爲,那麼你應該真的用一些可以輕鬆交換的東西替換它們。 –