2

我想测试(使用 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();
    }

}

不过,这会导致“已经模拟”的异常。

有人知道如何解决这个问题吗?

4

1 回答 1

2

您是否尝试过使用 MockUps?像这样的东西只会模拟complexPrivateMethod

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

  //do something with MyClass
}
于 2015-08-27T15:12:14.530 回答