我正在尝试在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?

最佳答案

TestSubscriberFlowable有关,而TestObserverObservable一起使用。但是对于这两者,您实际上都不必手动订阅任何内容。您只需使用test()方法即可。

observable.test()
      .assertNoErrors()
      .assertValue(expected)
      .assertComplete();

10-08 19:27