2016-06-28 12 views
6

में Build.VERSION.SDK_INT का स्टब वैल्यू। मुझे आश्चर्य है कि Build.Version.SDK_INT के मान को रोकने के लिए वैसे भी है? मान लीजिए मैं ClassUnderTest में निम्नलिखित लाइनों है:स्थानीय यूनिट टेस्ट

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

मैं सभी कोड कैसे कवर कर सकते हैं?

मेरा मतलब है कि मैं दोनों ब्लॉक दर्ज करने के लिए अलग-अलग SDK_INT के साथ दो परीक्षण चलाने के लिए चाहता हूं।

यह एंड्रॉयड स्थानीय इकाई 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"); यदि यह मैकिटो पर PowerMockito काम नहीं करता है और स्थिर क्षेत्र का नकल करता है। – toshkinl

+0

धन्यवाद! काम किया! –

संबंधित मुद्दे