سؤال

في بعض الأحيان، وتريد لاختبار أسلوب فئة وتريد أن تفعل توقع على دعوة من أسلوب فئة السوبر. لم يتم العثور على طريقة للقيام بذلك التوقعات في جافا باستخدام easymock أو jmock (وأنا أعتقد أنه ليس من الممكن).

وهناك (النسبي) حل نظيفة، لإنشاء مندوب بمنطق أسلوب فئة السوبر ومن ثم وضع توقعات على ذلك، ولكن لا أعرف لماذا ومتى استخدام هذا الحل ¿أي أفكار / أمثلة؟

والشكر

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

المحلول

حسنا، يمكنك إذا كنت ترغب في ذلك. أنا لا أعرف ما إذا كنت معتادا على JMockit أو تذهب للتحقق من ذلك. الإصدار الحالي هو 0.999.17 في الوقت نفسه، دعونا نلقي نظرة على ذلك ...

وافترض التسلسل الهرمي فئة التالي:

public class Bar {
    public void bar() {
        System.out.println("Bar#bar()");
    }
}

public class Foo extends Bar {
    public void bar() {
        super.bar();
        System.out.println("Foo#bar()");
    }
}

وبعد ذلك، وذلك باستخدام JMockit في FooTest.java الخاص بك يمكنك التحقق من أن كنت تريد أن تجعل في الواقع دعوة إلى Bar من Foo.

@MockClass(realClass = Bar.class)
public static class MockBar {
    private boolean barCalled = false;

    @Mock
    public void bar() {
        this.barCalled = true;
        System.out.println("mocked bar");
    }
}

@Test
public void barShouldCallSuperBar() {
    MockBar mockBar = new MockBar();
    Mockit.setUpMock(Bar.class, mockBar);

    Foo foo = new Foo();
    foo.bar();

    Assert.assertTrue(mockBar.barCalled);

    Mockit.tearDownMocks();
}

نصائح أخرى

والتوسع فيCem Catikkas الجواب، وذلك باستخدام JMockit 1.22:

@Test
public void barShouldCallSuperBar() {
    new MockUp<Bar>() {
        @Mock
        public void bar() {
            barCalled = true;
            System.out.println("mocked bar");
        }
    };

    Foo foo = new Foo();
    foo.bar();

    Assert.assertTrue(mockBar.barCalled);
}

لا حاجة لفئة ثابتة المشروح معMockClass، يتم استبداله من قبل الطبقة نموذج بالحجم الطبيعي.

وأنا لا أعتقد أن يسخر من دعوة سوبر - يشعر أن لي مثل سلوك هناك جزء من سلوك الفئة نفسها، بدلا من سلوك تبعية. ساخرا يشعر دائما كما ينبغي أن يكون على علاقة مع تبعيات أكثر من أي شيء آخر.

هل لديك مثال جيد على هذا النوع من المكالمة التي تريد أن يسخر بها؟ إذا كنت تريد أن يسخر من دعوة من هذا القبيل، فإنه سيكون من المفيد النظر في تكوين بدلا من الميراث؟

وهناك العديد من الاختبارات التي تفعل ذلك (أي تحديد استدعاء المتوقع على طريقة عظمى من الدرجة) باستخدام API توقعات JMockit، في جناح اختبار عينة المتحركة التحولات. على سبيل المثال، في FadeInTest حالة اختبار.

لا، لا توجد وسيلة من وسائل ساخرا الطبقة السوبر مع jMock .

ولكن هناك حل سريع وقذرة لمشكلتك. افترض أن لديك فئة A و B الطبقة يمتد A. تريد أن يسخر أأ طريقة () على B. يمكنك إدخال الدرجة C يمتد B في التعليمات البرمجية الاختبار وتجاوز أسلوب الكالسيوم () (مجرد دعوة عظمى، أو العودة لاغية، والهوية لا يهم). بعد أن وهمية C واستخدام وهمية في كل مكان، حيث كنت تستخدم B.

واعتراض مكالمة السوبر هو أكثر من اللازم غرامة الحبيبات. لا تبالغ في العزلة.

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