2016-06-28 13 views
6

Zastanawiam się, czy istnieje mimo to dodanie wartości Build.Version.SDK_INT? Załóżmy, że mam następujące wiersze w ClassUnderTest:Wartość początkowa obiektu Build.VERSION.SDK_INT w teście jednostki lokalnej

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
    //do work 
}else{ 
    //do another work 
} 

Jak mogę objąć wszystkie kodu?

Chodzi mi o to, że chcę uruchomić dwa testy z różnymi SDK_INT, aby wprowadzić oba bloki.

Czy to możliwe w Androidzie lokalnych testach jednostkowych przy użyciu Mockito/PowerMockito?

Dzięki

Odpowiedz

19

zmienić wartość przy użyciu odbicia.

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); 
} 

A potem

setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 123); 

To jest testowany. Prace.

+0

To nie zadziała, ponieważ getField() oczekuje na nazwę zmiennej, a Build.VERSION.SDK_INT jest w rzeczywistości wartością. –

+3

setFinalStatic (Build.VERSION.class.getField ("SDK_INT"), "123"); Jeśli to nie działa, może to być PowerMockito przez mockito i wyśmiewać statyczne pole. – toshkinl

+0

Dzięki! Pracował! –

Powiązane problemy