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 等。所以这里的要求有点额外:
- 私有方法和要测试的方法都在同一个class需要测试
- 需要调用私有方法来return它的模拟实现
- 使用此模拟实现 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());
}
我遇到这种情况,我需要测试重构代码在哪里是不可能的(由于组织原因 :( ))。
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 等。所以这里的要求有点额外:
- 私有方法和要测试的方法都在同一个class需要测试
- 需要调用私有方法来return它的模拟实现
- 使用此模拟实现 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());
}