محاولة لطفلة أنشطة Android باستخدام PowerMockito يلقي RunTimeException "كعب!"

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

سؤال

لقد وجدت هذا مثال حيث استخدموا PowerMock و Easymock لسخرية/السخرية من دروس القائمة و menuitem لنظام Android. لقد كنت أحاول القيام بشيء مماثل مع PowerMock و Mockito مع فئة النشاط.

أنا أفهم أن الكثير من الأساليب نهائية وأنهم في Android.jar يرمون جميعًا RunTimeException ("كعب!").

أفهم أيضًا أن هذا الاختبار لم يكتمل ، لكنني فقط أريد معرفة ما إذا كان من الممكن أن يسخر من فئة نشاط Android.

ولكن بالنظر إلى أن PowerMock يتيح لك السخرية من الفصول مع الأساليب النهائية ألا ينبغي أن يعمل هذا الرمز؟

@RunWith(PowerMockRunner.class)
@PrepareForTest(Activity.class)
public class MyTestCase extends TestCase {

    public void testPlease_JustWork() throws Exception {
        Activity mockActivity = PowerMockito.mock(Activity.class);

        PowerMockito.when(mockActivity.getTitle()).thenReturn("Title");
    }
}

أعتقد أن RunTimeException لم يعد يحدث وسيتم إعادة "العنوان" ولكنه لا يزال يلقي الاستثناء.

لقد جربت كل أنواع الأشياء المختلفة مثل doReturn("Title").when(mockActivity).getTitle(); و suppress(constructor(Activity.class));

هل أفعل شيئًا خاطئًا أم أن هذا غير ممكن؟

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

المحلول

لقد جربت عينة الكود الخاصة بك وهو يعمل هنا ، غريب. قمت بتنزيل PowerMock 1.4.5 مع Mockito و Junit بما في ذلك التبعيات واستخدمت Android.jar من SDK (2.2). يفشل فقط باستثناء إذا قمت بإزالة preparefortest.

تعديل

يمكنك استخدام Android.jar مع رمز الاستثناء الذي تمت إزالته ، المقدم في المقالة التي أشرت إليها.

نصائح أخرى

ربما ليست إجابة مباشرة على سؤالك ، ولكن يمكنك المحاولة robolectric من أجل اختبار أجزاء من تطبيق Android على جهاز الكمبيوتر الخاص بك.

Roboelectric يتجنب كعب الكعب! استثناء ويعطيك بعض الحد الأدنى تنفيذ فصول Android

أعتقد أن الإجابة هي أن ترتيب المكتبات المشار إليها مهم لأن Android.jar يتضمن بعض كعبان Junit.

يجب عليك التأكد من أنه في مشروع الاختبار الخاص بك ، إذا ذهبت إلى "الخصائص" ثم "Java Build Path" التي يرتبط بها جرة Junit بالنسخة الكاملة من PowerMock التي قمت بتنزيلها تظهر في علامة التبويب "Order and Export" في الاعلى android.jar. إذا لم يحدث ذلك ، فإن النظام يحل حزم junit.framework و junit.runner من Android.jar قبل أن يحلها من junit.jar المدرجة في powermock.

أدرك أن هذا السؤال قديم ، لكنني أعتقد أن هذا هو الإجابة الصحيحة ، لذا أردت التأكد من توثيقه على السؤال.

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