Sto provando a fare un po 'di risparmi in rete. Ho la risposta JSON per la richiesta effettiva e ho interfacce Retrofit che serializzano le risposte. Sono oltre frustrato cercando di impostare questo. Cosa dovrei fare qui? Sembra che le mie opzioni siano, 1) Usa un MockWebServer() 2) Usa un RequestInterceptor().Come risolvere java.lang.AssertionError durante la creazione di OkHttpClient in mockito?
Durante il tentativo di utilizzare 1 o 2, non posso per la vita di me istanziare un OkHttpClient() senza che ciò non vada a buon fine, in pratica questo mette ogni cosa che cerco di morte immediatamente. Ottengo un java.lang.AssertionError perché OkHttpClient lancia questo quando non riesce a trovare un algoritmo TLS.
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.**
}
}
Ho cercato di mantenere la classe "javax.net.ssl" nel android.jar utilizzando unMock, ma che non ha risolto l'errore.
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"
}
Quindi, in pratica, ho incontrato vari esempi di come prendere in giro le richieste di rete con retrofit 2, ma non riesco a superare questo ostacolo, e mi sento abbastanza sconfitti. Non ho visto nessun altro con questo problema, e sono sconcertato su come tutti possano facilmente istanziare nuovi OkHttpClients in tutti i loro test.
Qui ci sono le dipendenze rilevanti che sto usando.
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'
Non so come i due siano collegati internamente ma hanno avuto lo stesso problema con Powermock e questo l'ha risolto. – jett
@jett contento che potrebbe aiutare! È stato davvero difficile trovare la soluzione :( –
grazie! Ha funzionato anche per me.Puoi spiegare perché però? È un bug con okhttp o ..? – feresr