Mockito: كيفية تعبئة طريقة بسهولة دون السخرية من جميع المعلمات

StackOverflow https://stackoverflow.com/questions/2340801

سؤال

لدي طريقة أود أن أتعامل معها ولكن لديها الكثير من المعلمات. كيف يمكنني تجنب السخرية من جميع المعلمات ولكن لا تزال تسيء الطريقة.

السابق:

//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").

وفي الفرصة التالية ، قم بتقديم خطأ مقابل المشروع يطلب نقل المعلمات إلى كائن التكوين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top