2016-06-28 5 views
6

に私は疑問に思って? ClassUnderTestに次の行があるとします。スタブ値は、ローカルユニットテスト

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

すべてのコードをどのようにカバーできますか?

私は両方のブロックを入力する異なるSDK_INTとの2つのテストを実行したいわけ。

アンドロイドでも可能ですユニットテストMockito/PowerMockitoを使用していますか?

ありがとうございました

答えて

19

反射を使用して値を変更します。

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"), 123); 

それはテストされています。作品。

+0

のgetField()は、変数名のために期待しBuild.VERSION.SDK_INTが実際値であるので、それは動作しません。 –

+3

setFinalStatic(Build.VERSION.class.getField( "SDK_INT")、 "123")。 これは多分仕事mockitoオーバーPowerMockitoと静的フィールドを模擬していない場合。 – toshkinl

+0

ありがとう!働いた! –

関連する問題