البرمجة

كيفية تجنب java.lang.AssertionError عند إنشاء OkHttpClient في Mockito

في محاولتي لإنشاء استجابات شبكية معينة، وجدت نفسي متعثرًا في محاولة تكوين OkHttpClient() باستمرار. يبدو أن كل محاولتي تؤدي إلى فشل، حيث يتعرض البرنامج للإسقاط الفوري بسبب java.lang.AssertionError الذي يتم إلقاؤه عندما لا يمكن لـ OkHttpClient العثور على خوارزمية TLS.

الشيء الذي أحاول فهمه هو: ما الذي ينبغي عليّ فعله هنا؟ يبدو أن الخيارات المتاحة لي هي استخدام MockWebServer() أو استخدام RequestInterceptor()، ولكنني وجدت نفسي غير قادر على إنشاء OkHttpClient() بنجاح دون أن يفشل، مما يضعني في مأزق.

عند محاولة استخدام أي من الخيارين (MockWebServer() أو RequestInterceptor())، يظهر لي java.lang.AssertionError نتيجة لفشل في إنشاء OkHttpClient(). والشيء الذي يجعلني يائسًا هو أنه حتى بعد محاولة الحفاظ على فئة “javax.net.ssl” في android.jar باستخدام unMock، لم يتم حل الخطأ.

قمت بمحاولة الحفاظ على “javax.net.ssl” كما هو موضح في الكود التالي:

groovy
unMock { 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" }

ومع ذلك، لم يؤد ذلك إلى حل المشكلة. يظهر الخطأ الذي يفيد بعدم توفر خوارزمية TLS، مما يجعلني في حالة من الإحباط والتساؤل حول كيف يتمكن الآخرون من بسهولة إنشاء new OkHttpClients في جميع اختباراتهم دون مواجهة هذا التحدي.

في الختام، هل يمكنك إلقاء الضوء على الخطوات التي يجب اتخاذها هنا؟ وهل هناك شيء يمكنني فعله لتجاوز هذا العائق؟ أنا في حيرة، وأي توجيه يمكن تقديمه سيكون موضع تقدير كبير.

المزيد من المعلومات

في محاولتك لإعداد استجابات الشبكة المعدة مسبقًا باستخدام Retrofit في Java، تواجهك تحديات تقنية تتعلق بإنشاء OkHttpClient في وحدات الاختبار باستخدام Mockito. يبدو أن مشكلتك الرئيسية تكمن في الفشل في إنشاء OkHttpClient نظرًا لرمز AssertionError الذي يتم رميه عندما لا يمكن العثور على خوارزمية TLS.

لحل هذه المشكلة، يمكن أن يكون لديك خيارين رئيسيين: الاعتماد على MockWebServer أو استخدام RequestInterceptor. ومع ذلك، يظهر أن المشكلة الحالية تتمثل في فشل في إعداد OkHttpClient الذي يتعامل بشكل صارم مع خوارزميات TLS.

من الواضح أن محاولتك لتثبيت “javax.net.ssl” باستخدام unMock لم تحل المشكلة. يمكن أن يكون السبب في هذا هو أن تحديد TLS في مكان صحيح ليس بمثل هذه السهولة.

قد تحتاج أولاً إلى التحقق من الإعدادات الأمان في بيئة الاختبار الخاصة بك. تأكد من وجود خوارزميات TLS مدعومة ومكونة في بيئة اختبارات Mockito الخاصة بك.

ثم، يمكنك النظر في استخدام MockWebServer كخيار أساسي لاختبار طلبات Retrofit. MockWebServer يقوم بتشغيل خادم وهمي ويتيح لك تحديد استجابات محددة للطلبات. يمكن أن يساعد هذا في تفادي مشكلة TLS وتحقيق نجاح الاختبارات الخاصة بك.

إذا استمرت المشكلة، يمكنك أيضًا إلقاء نظرة على إصدارات مكتبات Retrofit وOkHttp الخاصة بك والتحقق من توافقها وتحديثها إلى أحدث إصدار إذا كان ذلك ضروريًا.

بتبني هذه الخطوات وفهم تفاصيل بيئة الاختبار الخاصة بك، يمكنك تحديد المشكلة والعمل نحو حلها بشكل فعّال.

زر الذهاب إلى الأعلى