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




testing mocking (2)

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

स्थानीय यूनिट टेस्ट में बिल्ड 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);

मेरा लक्ष्य मॉकिटो के साथ बिल्ड बनाना है। संस्करण। 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 एक विधि नहीं है


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

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

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

@PrepareForTest({Build.VERSION.class})




android-testing