2015-04-27 46 views
-2

如果要測試的類的某些公共方法使用私有字段,那麼我們可以在JUnit測試方法中嘲笑該私有字段嗎? 否則,如果您不能訪問專用字段,則不能使用或修改其值,並將其傳遞給JUnit測試以查看不同的結果。我們可以模擬JUnit測試的類的私有字段嗎?

+0

yo0u表示「模擬私人領域」是什麼意思?你的意思是「設置一個私人領域是一個模擬嗎?」所以你有A類,有一個B類作爲一個領域,你想嘲笑?你可以使用'ReflectionTestUtils'(從spring)將值注入私人領域,如果這是你正在尋找。如果該字段是原始值,則不可能「嘲笑」該字段。 – BretC

+0

無論如何,你應該測試接口而不是實現。 –

+0

是的,我剛剛讀了關於Mockito的地方。這個ReflectionTestUtils與Mockito相同嗎? –

回答

2

使用反射(以下示例不是JUnit測試,但它的工作原理完全相同)。

示例類private變量和print()確保set成功的方法。

public class stackoverflow2 { 
    private int testPrivate = 10; 
    public void print(){ 
     System.out.println(testPrivate); 
    } 
} 

調用類使用反射和getset方法。請注意,設置testPrivateReflection不會更改testPrivate,因爲它是值的本地副本,因此我們使用set

public class stackoverflow { 
    public static void main(String[] args) throws IllegalArgumentException, 
      IllegalAccessException, NoSuchFieldException { 
     stackoverflow2 sf2 = new stackoverflow2(); 
     Field f = sf2.getClass().getDeclaredField("testPrivate"); 
     f.setAccessible(true); 
     int testPrivateReflection = (int)f.get(sf2); 
     System.out.println(testPrivateReflection); 
     f.set(sf2, 15); 
     sf2.print(); 
    } 
} 
相關問題