web-dev-qa-db-ja.com

mockitoでOkHttpClientを作成するときにJava.lang.AssertionErrorを解決するにはどうすればよいですか?

私はいくつかの缶詰のネットワーク応答を作成しようとしています。実際のリクエストに対するjsonレスポンスがあり、レスポンスをシリアル化するRetrofitインターフェースがあります。私はこれを設定しようとしてイライラすることはありません。私はここで何をすべきですか?私のオプションは、1)MockWebServer()を使用する2)RequestInterceptor()を使用するようです。

1または2のいずれかを使用しようとしている間、失敗せずにOkHttpClient()をインスタンス化することはできません。基本的に、これにより、私が試みたすべてのものがすぐに停止します。 TLSアルゴリズムが見つからない場合、OkHttpClientがこれをスローするため、Java.lang.AssertionErrorが発生します。

 if (builder.sslSocketFactory != null || !isTLS) {
      this.sslSocketFactory = builder.sslSocketFactory;
    } else {
      try {
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, null, null);
        this.sslSocketFactory = sslContext.getSocketFactory();
      } catch (GeneralSecurityException e) {
        **throw new AssertionError(); // The system has no TLS. Just give up.**
      }
    }

UnMockを使用してAndroid.jarに「javax.net.ssl」クラスを保持しようとしましたが、エラーは解決しませんでした。

unMock {
    // URI to download the Android-all.jar from. e.g. https://oss.sonatype.org/content/groups/public/org/robolectric/Android-all/
    downloadFrom 'https://oss.sonatype.org/content/groups/public/org/robolectric/Android-all/4.3_r2-robolectric-0/Android-all-4.3_r2-robolectric-0.jar'

    keep "Android.util.Log"
    keep "javax.net.ssl"
}

つまり、基本的には、retrofit 2を使用してネットワーク要求をモックする方法のさまざまな例に出くわしましたが、このハードルを乗り越えることができず、かなり敗北していると感じています。私はこの問題を抱えている人を見たことがありません。そして、すべてのテストで誰もが新しいOkHttpClientを簡単にインスタンス化する方法に困惑しています。

これが私が使用している関連する依存関係です。

    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-all:1.10.19'
    testCompile 'org.powermock:powermock-mockito-release-full:1.6.4'
    testCompile 'org.powermock:powermock-module-junit4:1.6.4'
    testCompile 'org.easymock:easymock:3.4'
    testCompile 'org.powermock:powermock-api-easymock:1.6.4'
    testCompile 'com.squareup.okhttp3:mockwebserver:3.2.0'

    compile 'com.squareup.retrofit2:retrofit:2.0.0'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'
    compile 'com.google.code.gson:gson:2.4'
16
Tyler Pfaff

クラスの一番上にこのアノテーションが必要です。もちろん。

@PowerMockIgnore("javax.net.ssl.*")
68
Tyler Pfaff