مشكلة powermock مع طريقة ممتدة
سؤال
أحاول استخدام 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;
}
}