2016-02-08 12 views
6

मैं वर्तमान में एक प्रतिक्रिया मूल परियोजना में उपयोग के लिए एक एंड्रॉइड लाइब्रेरी बना रहा हूं। मुझे जावास्क्रिप्ट पर एक नक्शा उत्सर्जित करने की आवश्यकता है, इसलिए मैं प्रतिक्रिया देशी मूल लिखने योग्य वर्ग का उपयोग कर रहा हूं। दुर्भाग्यवश, वर्ग एक स्थिर ब्लॉक में रिएक्टिवेट्ज़नी एसओ लोड करता है, जो इकाई परीक्षणों के दौरान एक असंतुष्ट लिंक्स त्रुटि का कारण बनता है। मैं परीक्षण करने के लिए जुनीट और मॉकिटो का उपयोग कर रहा हूं।असंतुष्ट लिंक्स त्रुटि जब इकाई परीक्षण WritableNativeMap

मेरे कोड:

@Override 
public void onSomething() { 
    WritableMap params = Arguments.createMap(); 

    //fill map 

    sendEvent("onChange", params); 
} 

त्रुटि:

java.lang.UnsatisfiedLinkError: no reactnativejni in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:870) 
    at java.lang.System.loadLibrary(System.java:1119) 
    at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:172) 
    at com.facebook.react.bridge.NativeMap.<clinit>(NativeMap.java:23) 
    at com.facebook.react.bridge.Arguments.createMap(Arguments.java:29) 
    at me.MyClass.onSomething(myClass.java:23) 

मैं इकाई परीक्षण के लिए WriteableMap छोटा करते के बारे में एक टिप्पणी को देखने के बाद Arguments.createMap() विधि का उपयोग शुरू कर दिया है, लेकिन यह स्थिर है और मैं नहीं करना पसंद करेंगे एक स्थिर विधि stub है।

क्या यूनिट परीक्षण चलाते समय इस त्रुटि से छुटकारा पाने का कोई तरीका है?

उत्तर

4

मुझे नहीं लगता कि आप इकाई परीक्षण में तर्क विधियों का मज़ाक उड़ा सकते हैं (हालांकि मुझे विश्वास है कि आपको एक उपकरण परीक्षण में ऐसा करने की आवश्यकता नहीं है)।

फेसबुक के अपने परीक्षण में, वे PowerMockito का उपयोग उन्हें उपहास करने के लिए: https://github.com/facebook/react-native/blob/master/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java#L67

दिलचस्प बिट्स:

PowerMockito.mockStatic(Arguments.class); 
PowerMockito.when(Arguments.createArray()).thenAnswer(new Answer<Object>() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
    return new JavaOnlyArray(); 
    } 
}); 
PowerMockito.when(Arguments.createMap()).thenAnswer(new Answer<Object>() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
    return new JavaOnlyMap(); 
    } 
}); 

यह भी ध्यान रखें कि यह आपके build.gradle संशोधित करने के लिए इन मजाक उपकरण शामिल करने की आवश्यकता है: https://github.com/facebook/react-native/blob/master/ReactAndroid/build.gradle#L266

dependencies { 
    ... 
    testCompile "org.powermock:powermock-api-mockito:${POWERMOCK_VERSION}" 
    testCompile "org.powermock:powermock-module-junit4-rule:${POWERMOCK_VERSION}" 
    testCompile "org.powermock:powermock-classloading-xstream:${POWERMOCK_VERSION}" 
    testCompile "org.mockito:mockito-core:${MOCKITO_CORE_VERSION}" 
    testCompile "org.easytesting:fest-assert-core:${FEST_ASSERT_CORE_VERSION}" 
    testCompile "org.robolectric:robolectric:${ROBOLECTRIC_VERSION}" 
    ... 
} 

वे संस्करण जिन्हें वे उपयोग करते हैं एक gradle.properties फ़ाइल में पाया जा सकता है।

मुझे नहीं पता कि ये परीक्षण कॉन्फ़िगरेशन लंबे समय तक कितने स्थिर होंगे, लेकिन इस कॉन्फ़िगरेशन ने मुझे यूनिट परीक्षणों में रीडएबल मैप/ऐरे और राइटमैप/ऐरे के साथ काम करने दिया है।

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