2016-03-23 14 views
9

Tôi đang cố gắng thực hiện một số khẩu trang mạng được đóng hộp. Tôi có đáp ứng json cho các yêu cầu thực tế và tôi có giao diện Retrofit mà serialize phản ứng. Tôi đã quá thất vọng khi cố gắng thiết lập điều này. Tôi nên làm gì ở đây? Có vẻ như các tùy chọn của tôi là, 1) Sử dụng một MockWebServer() 2) Sử dụng một RequestInterceptor().Làm thế nào để giải quyết java.lang.AssertionError khi tạo OkHttpClient trong mockito?

Trong khi cố gắng sử dụng hoặc 1 hoặc 2, tôi không thể cho cuộc sống của tôi khởi tạo một OkHttpClient() mà không có nó không, về cơ bản điều này đặt mọi thứ tôi cố gắng chết ngay lập tức. Tôi nhận được một java.lang.AssertionError vì OkHttpClient là ném này khi nó không thể tìm thấy một thuật toán TLS.

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.** 
     } 
    } 

Tôi đã cố gắng giữ lớp "javax.net.ssl" trong android.jar bằng cách sử dụng unMock, nhưng điều đó không giải quyết được lỗi.

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" 
} 

Về cơ bản, tôi đã xem xét các ví dụ khác nhau về cách thử các yêu cầu mạng với trang bị thêm 2, nhưng tôi không thể vượt qua rào cản này và tôi cảm thấy khá thất bại. Tôi đã không nhìn thấy bất cứ ai khác với vấn đề này, và tôi bối rối như thế nào mọi người dễ dàng instantiating OkHttpClients mới trong tất cả các bài kiểm tra của họ.

Dưới đây là các phụ thuộc có liên quan mà tôi đang sử dụng.

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' 

Trả lời

39

Bạn cần chú thích này ở đầu lớp. Tất nhiên.

@PowerMockIgnore("javax.net.ssl.*") 
+0

Tôi không biết làm thế nào cả hai có liên quan nội bộ nhưng có cùng một vấn đề với Powermock và điều này cố định nó. – jett

+0

@jett vui vì nó có thể giúp bạn! Thật khó để tìm ra giải pháp đó: ( –

+2

cảm ơn! Nó cũng làm việc cho tôi. Bạn có thể giải thích tại sao không? Nó là một lỗi với okhttp hay ..? – feresr

Các vấn đề liên quan