大约一年前,我编写了一个 Android 应用程序,在这个技术堆栈上进行了测试。现在我正在开发新的应用程序并使用所有最新版本的库,并坚持将来自 Robolectric 测试的 Web 请求传递给 MockWebServer。
Junit 上的简单版本工作正常,但只要我将测试转换为 Robolectric 测试或通过 new TestScheduler() 添加 subscribeOn\observeOn (等于 Scheulers.immediate() 以在同一线程中立即获得响应)改造请求不会进入 MockWebDispatcher。
这是代码
//@RunWith(RobolectricTestRunner.class)
//@Config(constants = BuildConfig.class,
// sdk = Build.VERSION_CODES.LOLLIPOP)
public class ApiTest {
private MockWebServer server;
private Api api;
@Before
public void setUp() throws Exception {
server = new MockWebServer();
server.setDispatcher(new AppDispatcher());
server.start();
api = getApi(server.url("/").toString());
}
@Test
public void testCallToApi() {
TestObserver<List<User>> testObserver = new TestObserver<>();
Observable<List<User>> users = api.getUsers()
.subscribeOn(new TestScheduler())
.observeOn(new TestScheduler());
users.subscribe(testObserver);
testObserver.assertNoErrors();
testObserver.assertComplete();
assertEquals(1, 1);
}
private Api getApi(String url) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return retrofit.create(Api.class);
}
构建梯度
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.android.support:multidex:1.0.1'
testCompile 'org.robolectric:shadows-multidex:3.1'
testCompile 'com.squareup.okhttp3:mockwebserver:3.9.0'
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.3'
关于问题根源的任何想法?
我检查了我以前的,它适用于这个库集,API 测试运行良好
compile 'io.reactivex:rxandroid:1.0.1'
compile 'io.reactivex:rxjava:1.0.14'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.android.support:multidex:1.0.1'
testCompile "org.robolectric:shadows-multidex:3.0"
testCompile 'org.robolectric:robolectric:3.3.2'
testCompile('com.squareup.okhttp:mockwebserver:2.7.0', {
exclude group: 'com.squareup.okio', module: 'okio'
})
这就是为什么我假设新版本的库中引入的行为会发生一些变化