JMockit - частичное издевательство и издевательство над родителем

Я хотел бы протестировать (используя JMockit) класс, который выглядит следующим образом:

class MyClass extends ComplexParentClass {

    public void testedMethod() {
        ...
    }

    private int complexPrivateMethod() {
        ...
    }

}

Я не могу изменить класс. Проблема в том, что у ComplexParentClass есть сложный конструктор, что затрудняет его тестирование. Поэтому я хотел бы издеваться над родительским классом. Я также хотел бы издеваться над сложным частным методом. Но возможно ли что-то подобное?

Я попробовал следующее:

class MyClassTest {

    @Tested
    MyClass myClass;

    // mock the parent
    @Mocked
    ComplexParentClass complexParentClass;

    @Test
    public void test() {
        new Expectations(myClass) {{
            // partially mock the private method
            Deencapsulation.invoke(myClass, "complexPrivateMethod"); result = 0;
        }};

        myClass.testedMethod();
    }

}

Это приводит к "уже издевательскому" исключению.

У кого-нибудь есть идеи, как к этому подойти?

1 ответ

Вы пробовали использовать макеты? Что-то вроде этого будет издеваться complexPrivateMethod только:

@Test public void test() {
  new MockUp<ComplexParentClass> () {
    @Mock private int complexPrivateMethod() { return 0; }
  };

  //do something with MyClass
}
Другие вопросы по тегам