2017-01-24 39 views
2

我目前正在測試我的應用程序中的一個片段方法,該方法對其運行的設備的DisplayMetrics設置非常敏感。如何在RobolectricTestRunner的Robolectric測試中調整DisplayMetrics(如果可能,請提供示例)?如何調整Robolectric測試的屏幕密度?

這裏是我的簡單測試的要點,我希望能夠控制屏幕的DisplayMetrics。

@Test 
public void whenMyFramentMethod_willWorkForDensity() { 

    ... 

    startFragment(fragment); 

    //Results of this method will vary with different screen sizes. 
    Assert.assertEquals(200, fragment.fetchAWidth()); 
} 
+0

爲什麼你想測試寬度?如果它失敗了,你應該怎麼做? –

+0

這個測試的有用部分是確保某些方法在測量某些東西時將屏幕密度考慮在內。確保發生的一個顯而易見的方法是將屏幕密度設置爲特定的值,並驗證該方法的結果乘以該因子。 – Dennis

回答

0

你可以改變它的ShadowResources

@Test 
public void shadow_resources_example(){ 
    final Context context = RuntimeEnvironment.application; 
    final ShadowResources shadowResources = Shadows.shadowOf(context.getResources()); 
    shadowResources.setDensity(2f); //2 == xhdpi for example 
    assertEquals(20, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, context.getResources().getDisplayMetrics())); 
}