1

ほぼ 1 年前、私はこの技術スタックのテストでカバーされた Android アプリケーションを作成しました。現在、私は新しいアプリケーションに取り組んでおり、すべての最新バージョンのライブラリを使用して、Robolectric テストから MockWebServer に Web リクエストを渡すために立ち往生しています。

Junit の単純なバージョンは正常に動作しますが、テストを Robolectric テストに変換するか、新しい 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'
    })

そのため、ライブラリの新しいバージョンで導入された動作のいくつかの変更を想定しています

4

0 に答える 0