Bir uygulayıcıdan veri almak için RxJava kullanan bir sunucuyu test etmeye çalışıyorum. Kurulum yönteminde ben böyle bir şey yapıyorum:Schedulers.immediate() komut satırı notu testleriyle çalışmaz
@Before
public void setup() {
RxAndroidPlugins.getInstance().registerSchedulersHook(new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.immediate();
}
});
}
Yani benim test yönteminde ben sunum çağrıyı test edebilirsiniz:
@Test
public void testLoad() {
presenter.load();
verify(view).dataLoaded(data);
verify(interactor).load();
}
beklendiği gibi ben Android Studio her şey çalışma ile testini çalıştırırsanız, Sorunum komut satırında denerseniz
gradle test
Sonra Test başarısız olduğunu çünkü: Actually, there were zero interactions with this mock.
Bu yüzden bir Thread.sleep (2000) sunucusuna yapılan çağrıdan hemen sonra çalışmayı denedim ve sonra da çalışıyor, bu yüzden Schedulers.immediate(); komut satırından çalışmıyor, ancak neden ve nasıl hata ayıklaması/düzeltmesi hakkında hiçbir fikrim yok. Herhangi bir fikrin var mı?
DÜZENLEME: sunum uygulaması ->
public void load() {
Observable<List<Data>> obs = interactor.load()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io());
obs.subscribe(new Observer<List<Data>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Data> data) {
view.dataLoaded(data);
}
});
}
"getMainThreadScheduler" 'da arandığını kontrol etmek için bazı günlükler ekleyebilir misiniz? Kodlarınızda başka yarış koşullarınız olabilir. Zamanlayıcıları kodlarınızda nasıl kullandığınızı göstermek harika olurdu. – zsxwing
"Yük" uygulamanız eşzamansızdır (Schedulers.io() 'da abone olun). Bu nedenle, bir kerede 'load' çağrıldıktan sonra doğrulamamalısınız. – zsxwing
evet haklısınız, aslında sunucuda rxjava'nın tüm bağımlılıklarını kaldırmayı çözdüm, bu yüzden rxjava çağıran bir sarıcı var ama testte rxjava kullanmayan farklı bir sarıcı kullanıyorum. Sonunda, rxjava'yı değil, sunucumun mantığını test etmek istemiyorum :) –