سؤال

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

لذلك سأعطي مقتطفًا يوضح ما يحدث.

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

الآن أحاول السخرية من الفئة لأن هذا هو ما يستخدمه الكود الخاص بي. يخلق السخر بشكل جيد ، ولكن عندما أضيف توقعًا مثل ذلك:

expect(mockClassA.methodA()).andReturn("string");

أحصل على الخطأ التالية:

java.lang.IlegalStateException: تعريف السلوك المفقود لأسلوب استدعاء الطريقة السابقة () في org.easymock.internal.mockinvocationHandler.invoke (mockinvocationhandler.java:43) في org.powermock.api.easoCk.Intern (easymockmethodinvocationControl.java:95) في org.powermock.core.mockgateway.domethodcall (mockgateway.java:104) في org.powermock.core.mockgateway.methodcall (mockgateway.java:167) )

أي أفكار حول ما أفتقده؟ أعلم أنني لم أقم بتضمين الكثير من التفاصيل ، لكنني قمت بإعداد Classa للاختبار باستخدام التدوين ، كما أنني وضعت فقط إعادة التشغيل في مكان واحد للتأكد من أنني لا أضع Mockclassa بشكل غير صحيح في الحالة الخاطئة قبل تحديد التوقع.

هل كانت مفيدة؟

المحلول 2

الاستثناء الذي كنت أحصل عليه كان نتيجة لضعف التوقعات بدلاً من أي شيء يتعلق بتمديد الفصل. آسف على السؤال الخاطئ.

نصائح أخرى

لقد فعلت شيئًا كهذا وهو يعمل بالنسبة لي ، لكنني لا أفهم لماذا تحتاج إلى Powermock هنا (يمكنك القيام بذلك بدونه مع Easymock/Mockito).

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassA.class)
public class ClassATest {
    @Test
    public void finalMethodString() throws Exception {
        ClassA f = PowerMock.createNiceMock(ClassA.class);
        EasyMock.expect(f.methodA()).andReturn("haha");
        EasyMock.replay(f);
        assertEquals("haha1", f.methodA());
    }
}


class ClassA extends ClassB{
    @Override
    String methodA() {
        return "1";
    }
}
class ClassB extends ClassC{
    @Override
    String methodA() {
        return "b";
    }
}
class ClassC {
    String methodA() {
        return null;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top