我正在尝试在Android项目中使用JUnit4,在该项目中我还使用RxAndroid / RxJava。
我所做的是使用改造从UUID generator调用REST API
UUIDApi.java只是一个用于改造调用的接口(现在只是一个接口)
public interface UUIDApi {
static final String BASE_URL = "https://www.uuidgenerator.net";
@GET("/api/version4")
Observable<String> getUUID();
}
UUIDModel.java,其中初始化了改造并实现了上面编写的接口
public class UUIDModel implements UUIDApi{
private Retrofit retrofit;
private UUIDApi uuidApi;
UUIDObserver uuidObserver = new UUIDObserver();
public UUIDModel() {
retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(new ToStringConverterFactory())
.baseUrl(UUIDApi.BASE_URL)
.build();
uuidApi = retrofit.create(UUIDApi.class);
}
@Override
public Observable<String> getUUID() {
return uuidApi.getUUID();
}
public void generateUUID(){
Observable<String> observable = this.getUUID();
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(uuidObserver);
}
}
比起我,UUIDObserver只是一个实现Observer的类。
注意:new ToStringConverterFactory是我发现的一个类here
使用模拟器执行此代码,我确定它可以正常工作。问题是我不理解如何将代码统一,因为使用rxAndroid / rxJava会在另一个线程中执行它。
我读到:
测试可观察对象的官方方法是使用TestSubscriber,它是RxJava库直接提供的帮助者。
所以我尝试了
@Test
public void test_uuid() throws Exception {
UUIDApi uuidApi = new UUIDModel();
Observable<String> observable = uuidApi.getUUID();
TestSubscriber<String> testSubscriber = new TestSubscriber<>();
observable.subscribe(testSubscriber);
}
但在
observable.subscribe(testSubscriber);
处出现错误“无法解析方法'subscribe(io.reactivex.subscribers.TestSubscriber)”我究竟做错了什么?我应该如何应对rxProgramming和JUnit?
最佳答案
TestSubscriber
与Flowable
有关,而TestObserver
与Observable
一起使用。但是对于这两者,您实际上都不必手动订阅任何内容。您只需使用test()
方法即可。
observable.test()
.assertNoErrors()
.assertValue(expected)
.assertComplete();