2016-03-23 18 views
9

Bazı ağ bağlantılı yanıtlar yapmaya çalışıyorum. Asıl talep için json cevabım var ve yanıtları serileştiren retrofit arayüzlerim var. Bunu kurmak için hayal kırıklığının ötesindeyim. Burada ne yapmalıyım? Benim seçeneklerim görünüyor, 1) Bir MockWebServer kullanın() 2) Bir RequestInterceptor() kullanın.mockito içinde OkHttpClient oluştururken java.lang.AssertionError nasıl çözülür?

1 ya da 2'yi kullanmaya çalışırken, hayatımın başarısız olması için bir OkHttpClient() örneği oluşturamıyorum, temelde bu, hemen ölüme çalıştığım her şeyi koyuyor. Ben bir java.lang.AssertionError alıyorum çünkü OkHttpClient bir TLS algoritması bulamadığında bunu atar.

if (builder.sslSocketFactory != null || !isTLS) { 
     this.sslSocketFactory = builder.sslSocketFactory; 
    } else { 
     try { 
     SSLContext sslContext = SSLContext.getInstance("TLS"); 
     sslContext.init(null, null, null); 
     this.sslSocketFactory = sslContext.getSocketFactory(); 
     } catch (GeneralSecurityException e) { 
     **throw new AssertionError(); // The system has no TLS. Just give up.** 
     } 
    } 

Ben unMock kullanarak android.jar içinde "javax.net.ssl" sınıfı tutmaya çalıştım, ama bu hatayı çözmedi.

unMock { 
    // URI to download the android-all.jar from. e.g. https://oss.sonatype.org/content/groups/public/org/robolectric/android-all/ 
    downloadFrom 'https://oss.sonatype.org/content/groups/public/org/robolectric/android-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectric-0.jar' 

    keep "android.util.Log" 
    keep "javax.net.ssl" 
} 

Yani temelde, ben güçlendirme 2 ile ağ isteklerini alay nasıl çeşitli örnekler rastlamak ettik ama bu engel geçemiyorum ve ben çok mağlup duygu ediyorum. Bu problemle başka kimseyi görmedim ve herkesin tüm testlerinde yeni OkHttpClients'ı nasıl kolayca uyandırdığı konusunda şaşkınım.

Kullanmakta olduğunuz bağımlılıklar aşağıda verilmiştir.

testCompile 'junit:junit:4.12' 
    testCompile 'org.mockito:mockito-all:1.10.19' 
    testCompile 'org.powermock:powermock-mockito-release-full:1.6.4' 
    testCompile 'org.powermock:powermock-module-junit4:1.6.4' 
    testCompile 'org.easymock:easymock:3.4' 
    testCompile 'org.powermock:powermock-api-easymock:1.6.4' 
    testCompile 'com.squareup.okhttp3:mockwebserver:3.2.0' 

    compile 'com.squareup.retrofit2:retrofit:2.0.0' 
    compile 'com.squareup.retrofit2:converter-gson:2.0.0' 
    compile 'com.squareup.okhttp3:logging-interceptor:3.0.1' 
    compile 'com.google.code.gson:gson:2.4' 

cevap

39

Sınıfın en üstünde bu ek açıklamaya ihtiyacınız var. Tabii ki.

@PowerMockIgnore("javax.net.ssl.*") 
+0

İkisinin dahili olarak nasıl ilişkili olduğunu bilmiyorum ama Powermock ile aynı sorunu yaşadım ve bunu düzeltdim. – jett

+0

@jett bu konuda yardımcı olabildi! Bu çözümü bulmak gerçekten zordu: ( –

+2

teşekkürler! Benim için de işe yaradı. Neden açıklayabiliyorsun? Okhttp ile bir hata mı yoksa ..? – feresr