我有这种情况需要测试无法重新分解代码的地方(由于组织原因:()。
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等。所以这里的要求有点额外:
请就此提出建议。我看到的所有示例都只是为了模拟返回String
/ int
的私有方法,而在这里我需要一个复杂的对象(它自己被模拟)然后用它来返回来自正在测试的方法中的最终答案。
答案 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());
}