2017-01-24 8 views
2

Ich teste gerade eine Fragmentmethode in meiner App, die empfindlich auf die DisplayMetrics-Einstellungen des Geräts reagiert, auf dem sie ausgeführt wird. Wie passt man die DisplayMetrics in einem Robolectric-Test für einen RobolectricTestRunner an (bitte, wenn möglich, ein Beispiel angeben)?Wie kann die Bildschirmdichte für einen Robolectric-Test eingestellt werden?

Hier ist der Kern meines einfachen Tests, wo ich die DisplayMetrics des Bildschirms steuern kann.

@Test 
public void whenMyFramentMethod_willWorkForDensity() { 

    ... 

    startFragment(fragment); 

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

Warum würden Sie Breite testen? Wenn es scheitert, was sollten Sie tun? –

+0

Der nützliche Teil dieses Tests würde sein, um sicherzustellen, dass bei einer Methode die Bildschirmdichte berücksichtigt wird, wenn etwas gemessen wird. Eine naheliegende Möglichkeit, dies sicherzustellen, besteht darin, die Bildschirmdichte auf etwas Bestimmtes zu setzen und zu verifizieren, dass das Ergebnis der Methode mit diesem Faktor multipliziert wird. – Dennis

Antwort

0

Sie können es auf der ShadowResources ändern:

@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())); 
} 
Verwandte Themen