2
我正在爲使用自省的代碼塊編寫單元測試;具體而言,它調用getDeclaredField()
關於我想模擬的類,並嘗試獲取該字段的值。有沒有辦法用Mockito來嘲笑這個?我可以測試使用Mockito自檢的代碼嗎?
我正在爲使用自省的代碼塊編寫單元測試;具體而言,它調用getDeclaredField()
關於我想模擬的類,並嘗試獲取該字段的值。有沒有辦法用Mockito來嘲笑這個?我可以測試使用Mockito自檢的代碼嗎?
Mockito通過創建一個模擬使用您試圖愚弄的相同內省庫。即使你可以哄騙它工作,但我不確定要理解或維護是多麼容易。
我建議創建一個非常小的嵌套類,並在其上運行正常:
public class YourTest {
private static class SampleClass {
String field1;
int field2;
}
@Test public void introspectionWorks() {
yourSUT.process(new SampleClass());
}
}
除非是,提取難以模擬的呼叫到一個方法,你可以很容易地存根:
public class YourSUT {
/* ... */
/* package */ Class<?> getFieldType(Object object, String fieldName) {
return object.getClass().getDeclaredField(fieldName).getType();
}
}
public class YourTest {
@Test public void introspectionWorks() {
YourSUT spy = Mockito.spy(yourSUT);
doReturn(String.class).when(spy).getFieldType(myObject, "someStringField");
}
}