In Retrofit 1.x Ho utilizzato il seguente modello per creare classi di servizi API che simulavano una connessione di rete errata per determinate varianti di build.Simula una rete errata con Retrofit 2 (su API effettiva, ovvero non simulata)
// Retrofit 1
private <T> T create(Class<T> apiServiceClass) {
T apiService = restAdapter.create(apiServiceClass);
if (!BuildConfig.IS_PRODUCTION_BUILD) {
endpoints = mockRestAdapter.create(apiServiceClass, apiService);
}
return apiService;
}
La cosa interessante di questo è che vengono utilizzati i miei endpoint API effettivi. In questo modo posso vedere come si comporta l'applicazione su una connessione traballante e non ho bisogno di fornire risposte burlone/artificiali.
Ora, in Retrofit 2 l'API per MockRestAdapter
o meglio MockRetrofit
è stata modificata completamente. MockRetrofit#create
restituisce ora un BehaviorDelegate
. Se provo ad usare lo stesso modello di prima
// Retrofit 2
private <T> T create(Class<T> apiServiceClass) {
T apiService = retrofit.create(apiServiceClass);
if (!BuildConfig.IS_PRODUCTION_BUILD) {
endpoints = mockRetrofit.create(apiServiceClass).returning(???);
}
return apiService;
}
mi si blocca sulla returning(???)
. returning
prevede un'implementazione Call<?>
. Ma non riesco a capire come implementarlo per farlo funzionare come il mio esempio Retrofit 1 (forse non è destinato a).
Quindi la mia domanda è: In generale, come posso ottenere il suddetto pattern Retrofit 1 per simulare una rete errata su un'API effettiva con Retrofit 2?
Esattamente quello che cerco. Grazie! – user1795683
Prima di tutto, grazie per aver risposto. Anch'io speravo di risolvere il problema con 'MockRetrofit'. Ho finito per fare qualcosa di simile a te. Ma se stai ruotando tu stesso usando "Interceptor" di OkHttp, potresti anche scrivere la tua classe 'NetworkBehavior' che fa quello che ti serve. Altrimenti, si sta facendo affidamento sull'interna 'retrofit-mock' lib solo per usare due metodi su una classe. La dipendenza – tir38
in build.gradle è 'compile 'com.squareup.retrofit2: retrofit-mock: 2.3.0'' (versione 2.3.0 attualmente) –