2016-03-23 6 views
9

Ich versuche einige vordefinierte Netzwerk-Responses zu machen. Ich habe die JSON-Antwort für die tatsächliche Anfrage und ich habe Retrofit-Schnittstellen, die Antworten serialisieren. Ich bin mehr als frustriert, wenn ich versuche, das einzurichten. Was soll ich hier machen? Es scheint, meine Optionen sind, 1) Verwenden Sie einen MockWebServer() 2) Verwenden Sie einen RequestInterceptor().Wie man java.lang.AssertionError beim Erstellen von OkHttpClient in mockito auflöst?

Bei dem Versuch, entweder 1 oder 2 zu verwenden, kann ich nicht für das Leben von mir einen OkHttpClient instanziieren, ohne dass es scheitert, im Grunde setzt das alles, was ich versuche, sofort zum Erliegen. Ich bekomme einen java.lang.AssertionError, weil OkHttpClient dies wirft, wenn er keinen TLS-Algorithmus finden kann.

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.** 
     } 
    } 

Ich habe versucht, die „javax.net.ssl“ Klasse in der android.jar zu halten unMock verwenden, aber das hat den Fehler nicht zu beheben.

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" 
} 

Also im Grunde habe ich über verschiedene Beispiele kommen, wie Netzwerkanforderungen mit Retrofit-2 zu verspotten, aber ich kann diese Hürde nicht bekommen, und ich fühle mich ziemlich besiegt. Ich habe niemanden mit diesem Problem gesehen, und ich bin verblüfft darüber, wie jeder neue OkHttpClients in all seinen Tests leicht instanziiert.

Hier sind die relevanten Abhängigkeiten, die ich verwende.

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' 

Antwort

39

Sie benötigen diese Anmerkung oben in der Klasse. Na sicher.

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

Ich weiß nicht, wie die beiden intern verwandt sind, hatte aber das gleiche Problem mit Powermock und dies behoben. – jett

+0

@jett froh, dass es helfen könnte! Es war wirklich schwer, diese Lösung zu finden :( –

+2

danke! Es funktionierte auch für mich. Können Sie erklären, warum? Ist es ein Fehler mit okhttp oder ..? – feresr