【发布时间】:2018-03-29 23:49:03
【问题描述】:
我刚开始学习 RxAndroid,但不幸的是我学习的书没有涉及任何单元测试。我在谷歌上搜索了很多,但没有找到任何简单的教程以精确的方式涵盖 RxAndroid 单元测试。
我基本上已经使用 RxAndroid 和 Retrofit 2 编写了一个小的 REST API。这是 ApiManager 类:
public class MyAPIManager {
private final MyService myService;
public MyAPIManager() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
// set your desired log level
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder b = new OkHttpClient.Builder();
b.readTimeout(35000, TimeUnit.MILLISECONDS);
b.connectTimeout(35000, TimeUnit.MILLISECONDS);
b.addInterceptor(logging);
OkHttpClient client = b.build();
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://192.168.1.7:8000")
.client(client)
.build();
myService = retrofit.create(MyService.class);
}
public Observable<Token> getToken(String username, String password) {
return myService.getToken(username, password)
.subscribeOn(Schedulers.io());
.observeOn(AndroidSchedulers.mainThread());
}
}
我正在尝试为getToken 创建一个单元测试。这是我的示例测试:
public class MyAPIManagerTest {
private MyAPIManager myAPIManager;
@Test
public void getToken() throws Exception {
myAPIManager = new MyAPIManager();
Observable<Token> o = myAPIManager.getToken("hello", "mytoken");
o.test().assertSubscribed();
o.test().assertValueCount(1);
}
}
由于subscribeOn(Schedulers.io),上述测试没有在主线程上运行,因此它返回 0 值。如果我从MyAPIManager 中删除subscribeOn(Schedulers.io),那么它运行良好并返回1 个值。有没有办法用Schedulers.io进行测试?
【问题讨论】:
标签: android unit-testing retrofit2 rx-android rx-java2