Jmockit- mock Private Medhod 到 return 复杂对象,然后将其用于 Expectations()

Jmockit- mock Private Medhod to return complex object, and then use that for Expectations()

我遇到这种情况,我需要测试重构代码在哪里是不可能的(由于组织原因 :( ))。

class ClassToTest {
    private ComplexObject createComplexObject() throws SomeException{
        //create the complex object
    }

    public ReturnObject methodToTest(RequestObject reqObj) throws SomeOtherException {
        ComplexObject complexObj = createComplexObject();
        int answer = complexObj.doSomething();
        return new ReturnObject(answer);
    }

}

我看到的大多数示例都是关于调用私有方法并让它们 return 一个字符串或一个 int 等。所以这里的要求有点额外:

  1. 私有方法和要测试的方法都在同一个class需要测试
  2. 需要调用私有方法来return它的模拟实现
  3. 使用此模拟实现 return 最终答案

请指教。我看到的所有示例都只是将私有方法模拟到 return String/int,而在这里我需要一个复杂的对象(它本身被模拟)然后使用return 正在测试的方法中的最终答案。

您不想模拟私有方法(这只是一个内部实现细节),而是 ComplexObject 依赖项。所以:

@Test
public void exampleTest(@Mocked final ComplexObject anyCmplxObj) throws Exception
{
    new Expectations() {{ anyCmplxObj.doSomething(); result = 123; }};
    RequestObject request = new RequestObject(...);

    ReturnObject ret = new ClassToTest().methodToTest(request);

    assertEquals(123, ret.getAnswer());
}