Jmockit-模拟Private Medhod返回复杂对象,然后将其用于Expectations()

时间:2015-04-12 13:39:44

标签: jmockit private-methods

我有这种情况需要测试无法重新分解代码的地方(由于组织原因:()。

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);
    }

}

我看到的大多数样本都是围绕调用私有方法并让它们返回一个String或一个int等。所以这里的要求有点额外:

  1. 私有方法和要测试的方法都在同一个需要测试的类中
  2. 需要调用私有方法来返回它的模拟实现
  3. 使用此模拟实现返回最终答案
  4. 请就此提出建议。我看到的所有示例都只是为了模拟返回String / int的私有方法,而在这里我需要一个复杂的对象(它自己被模拟)然后用它来返回来自正在测试的方法中的最终答案。

1 个答案:

答案 0 :(得分:0)

您不想模拟私有方法(这只是一个内部实现细节),而是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());
}
相关问题