Mockito: كيفية تعبئة طريقة بسهولة دون السخرية من جميع المعلمات
-
22-09-2019 - |
سؤال
لدي طريقة أود أن أتعامل معها ولكن لديها الكثير من المعلمات. كيف يمكنني تجنب السخرية من جميع المعلمات ولكن لا تزال تسيء الطريقة.
السابق:
//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);
المحلول
أنا لا أتابع تمامًا المشكلة التي تواجهها باستخدام Mockito. على افتراض أنك تنشئ وهمية من الواجهة التي تحتوي على myMethod()
الطريقة ، يمكنك بعد ذلك التحقق من المعلمات فقط بالطريقة التي تهتم بها. على سبيل المثال (على افتراض أن الواجهة تسمى MyInterface
واستخدام Junit 4):
@Test
public void test() {
MyInterface myInterface = mock(MyInterface.class);
FooBar expectedFooBar = new FooBar();
// other testing stuff
verify(myInterface).myMethod(any(), any(), eq(expectedFooBar), any(), ...);
}
ستحتاج إلى إجراء استيراد ثابت على أساليب Mockito حتى يعمل هذا. ال any()
لا يهتم Matcher بالقيمة التي تم تمريرها عند التحقق.
لا يمكنك تجنب تمرير شيء ما لكل وسيطة في طريقتك (حتى لو كانت خالية فقط).
نصائح أخرى
استخدم mockito.any
إذا قبل Myobj mymethod String ، String ، Bar على سبيل المثال
لاستدعاء مكالمة
Mockito.when(myojb.myMethod(Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)))
.thenReturn(amockedobject);
للتحقق من السفن ، أعطى الجواب بالفعل
Mockito.verify(myojb).myMethod(
Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)));
قم بإنشاء فئة Wrapper التي تستدعي الطريقة الحقيقية وتملأ جميع الوسائط ولكن تلك التي تزودها (ويعرف أيضًا باسم "Devation").
وفي الفرصة التالية ، قم بتقديم خطأ مقابل المشروع يطلب نقل المعلمات إلى كائن التكوين.