到目前爲止,與其他類似的問題看起來像你不得不使用反射。
Stub value of Build.VERSION.SDK_INT in Local Unit Test
How to mock a static final variable using JUnit, EasyMock or PowerMock
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
......然後在這種情況下,像這樣使用...
setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16);
另一種方法周圍是創建一個訪問類/將該字段包裹在可以稍後被嘲笑的方法中
public interface BuildVersionAccessor {
int getSDK_INT();
}
,然後嘲笑那類/接口
BuildVersionAccessor buildVersion = mock(BuildVersionAccessor.class);
when(buildVersion.getSDK_INT()).thenReturn(16);
http://stackoverflow.com/questions/38074224/stub-value-of-build-version-sdk-int-in-local-unit -test – Nkosi
也許不.. ..? 這似乎是你試圖嘲諷太難。如果您試圖獲取讀取該int的代碼行的代碼覆蓋率,那爲什麼? 如果您試圖讓系統顯示其行爲與不同的構建行爲不同,然後將調用包裝爲'Build',背後可以模擬一些東西。 –