2016-06-28 36 views
6

Build.Version.SDK_INT'un değerini saplamak için herhangi bir neden var mı diye merak ediyorum?Yerel Birim Testinde Build.VERSION.SDK_INT Stub değeri

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

nasıl tüm kodu kapsayabilir: Ben ClassUnderTest aşağıdaki satırları varsayalım?

Her iki bloğu girmek için farklı SDK_INT ile iki test çalıştırmak istiyorum.

Android yerel birim testleri Mockito/PowerMockito kullanıyor musunuz?

Teşekkürler

cevap

19

Yansıma kullanarak değeri değiştirin.

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

Sonra

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

Bu test edilir. Eserleri.

+0

Bu işe yaramaz çünkü getField() değişken adı için bekler ve Build.VERSION.SDK_INT aslında bir değerdir. –

+3

setFinalStatic (Build.VERSION.class.getField ("SDK_INT"), "123"); Bu işe yaramazsa, mockito üzerinde PowerMockito ve statik alanı alay edin. – toshkinl

+0

Teşekkürler! Yaradı! –