2015-11-21 13 views
9

में एंड्रॉयड बेस 64 एन्कोड और डीकोड वापसी अशक्त मैं http://developer.android.com/reference/android/util/Base64.html वर्ग का उपयोग कर एंड्रॉयड में एक Base64 इनकोडिंग स्ट्रिंग डिकोड करने का प्रयास कर रहा हूँ।यूनिट टेस्ट

दोनों encodeToString और डिकोड तरीकों लौट रहे हैं अशक्त, और मुझे नहीं पता कि क्या गलत है, यहाँ डिकोड के लिए मेरे कोड है है:

// Should decode to "GRC" 
String friendlyNameBase64Encoded = "R1JD"; 

// This returns null 
byte[] friendlyNameByteArray = Base64.decode(friendlyNameBase64Encoded, Base64.DEFAULT); 

// Fails with NullPointerException 
String friendlyName = new String(friendlyNameByteArray, "UTF-8"); 

मैं चल रहा हूँ एंड्रॉयड एपीआई 23.1.0

+1

किया जा सका कृपया लॉगबैक संदेश पोस्ट करें ? बीटीडब्लू, मैं आपके द्वारा पोस्ट किए गए कोड से डीकोडेड स्ट्रिंग, यानी, जीआरसी प्राप्त करने में सफल रहा था। – Suhas

+0

तो, अब तक मैं केवल एक इकाई परीक्षण से यह कोड चला रहा हूं। मैंने अभी असली के लिए ऐप चलाया है और ऐसा लगता है कि यह काम कर रहा है। यूनिट परीक्षण में क्या गलत हो सकता है कोई विचार? संभवतः unitTests.returnDefaultValues ​​का उपयोग करने के लिए कारण – brnby

+0

= सच – brnby

उत्तर

12

मैं मेरे यूनिट परीक्षणों में एक ही समस्या थी। मुझे पता नहीं था कि बेस 64 क्लास का उपयोग मैं एंड्रॉइड एपीआई का एक हिस्सा है, इसलिए

आप नियमित JUnit परीक्षण में android.util.Base64 का उपयोग नहीं कर सकते हैं, यह एक इंस्ट्रुमेंटेशन टेस्ट होना चाहिए।

हालांकि, अगर आप वास्तव में एक इकाई परीक्षण के रूप में यह चाहते हैं, आप अपाचे कॉमन्स Base64 वर्ग के बजाय इस्तेमाल कर सकते हैं। Gradle निर्माण में यह शामिल हैं:

// https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 
compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.1' 

और फिर थोड़ा अलग उपयोग,

+0

संकलन समूह: 'कॉमन्स-कोडेक', नाम: 'कॉमन्स-कोडेक', संस्करण: '1.9' निर्भरता थी जो मेरे लिए काम करती थी। – user2481857

0

अनुवर्ती ओ एंड्रॉयड ट्यूटोरियल और इकाई परीक्षण नोट्स जब तुम कुछ एंड्रॉयड libs

अपने मामले में आप android.Base64 के आधार पर कर रहे हैं के उपयोग के बिना सिर्फ ईकाई परीक्षण की जरूरत है। मेरे पास src/test ->src/androidTest से समान समस्याएं थीं और परीक्षण कक्षाएं चल रही थीं। वे परीक्षण आभासी मशीन या असली एंड्रॉइड डिवाइस पर चलाए जाते हैं। मैंने पहली नजर में अंतर को नहीं देखा।

0

आप Robolectric धावक

  1. उपयोग कर सकते हैं अपने build.gradle में निर्भरता जोड़ें:

    testCompile 'org.robolectric:robolectric:X.X.X' 
    
  2. अपने परीक्षण कक्षा में इस लाइन जोड़ें:

    import org.junit.runner.RunWith; 
    import org.robolectric.RobolectricTestRunner; 
    
    @RunWith(RobolectricTestRunner.class) 
    public class MyTestingClassTest { 
        ... 
    } 
    
संबंधित मुद्दे