【发布时间】:2019-05-05 07:55:36
【问题描述】:
我在下面有一段代码,其中 Employee 类使用反射创建 AppraisalCalculator 的对象。我想使用 PowerMockito 模拟这个 AppraisalCalculator 对象。
class AppraisalCalculator {
public int appraisal() {
return 300;
}
}
class Employee {
public int updateSalary() {
// line 1
AppraisalCalculator ac =
AppraisalCalculator.class.getConstructor().newInstance();
return ac.appraisal();
}
}
class TestRunner {
@Test
public void test() {
AppraisalCalulator acMock=PowerMockito.mock(AppraisalCalculator.class);
PowerMockito
.whenNew(AppraisalCalculator.class)
.withNoArguments()
.thenReturn(600);
Employee emp = new Employee();
int actualValue = emp.updateSalary();
int expectedValue=600;
Assert.equals(expectedValue,actualValue);
}
}
在这里,即使我已经模拟了评估计算器对象,它仍然从AppraisalCalculator 调用真正的appraisal() 方法。如果第 1 行的实际 AppraisalCalculator 是使用 new Operator 而不是 newInstance() 创建的,则此模拟有效。
如果实际对象是使用反射创建的,谁能解释为什么这不起作用?在这种情况下我该怎么做才能模拟这个对象?
【问题讨论】:
-
请下次将实际代码复制到 SO。您的代码中有许多拼写错误和缺失的部分。很难尝试。
标签: mockito easymock powermockito