android - Mockito के साथ मॉक बिल्ड संस्करण




testing mocking (2)

मेरा लक्ष्य मॉकिटो के साथ बिल्ड बनाना है। संस्करण। SDK_INT पहले ही कोशिश कर ली है:

final Build.VERSION buildVersion = Mockito.mock(Build.VERSION.class);
doReturn(buildVersion.getClass()).when(buildVersion).getClass();
doReturn(16).when(buildVersion.SDK_INT);

समस्या यह है कि: नकली के बाद विधि की आवश्यकता होती है, और .SDK_INT एक विधि नहीं है


अब तक इस तरह के अन्य प्रश्नों से ऐसा लगता है कि आपको प्रतिबिंब का उपयोग करना पड़ता है

स्थानीय यूनिट टेस्ट में बिल्ड VERSION.SDK_INT का स्टब मान

JUnit, EasyMock या PowerMock का उपयोग कर एक स्थिर अंतिम वैरिएबल कैसे नकल करें

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

एक ऐसा तरीका तैयार करना होगा जो एक ऐसी कक्षा तैयार कर सके जो किसी विधि में फ़ील्ड को एक्सेस / लपेटे, जिसे बाद में मजाक किया जा सकता है

public interface BuildVersionAccessor {
    int getSDK_INT();
}

और फिर उस श्रेणी / इंटरफ़ेस का मजाक कर रहा है

BuildVersionAccessor buildVersion = mock(BuildVersionAccessor.class);
when(buildVersion.getSDK_INT()).thenReturn(16);

PowerMockito का उपयोग करते हुए यह मेरे लिए काम करता है

Whitebox.setInternalState(Build.VERSION.class, "SDK_INT", 16);

टाइप करने के लिए मत भूलना

@PrepareForTest({Build.VERSION.class})




android-testing