我正在使用旧代码,并希望增加其测试范围。
我有一个像这样的课程:
public class MyStrategy implements SomeStrategy {
TimeAndDateUtils timeAndDateUtils = new TimeAndDateUtils();
@Override
public boolean shouldBeExtracted(Argument argument) {
Date currentDate = timeAndDateUtils.getCurrentDate();
return currentDate.isBefore(argument.getDate());
}
}
我想测试对
timeAndDateUtils.getCurrentDate()
的调用来模拟shouldBeExtracted-Method,以便它返回一些固定值。所以我想做的是:
Date currentDate = %some fixed date%
TimeAndDateUtils timeAndDateUtils = Mockito.mock(TimeAndDateUtils.class);
Mockito.when(timeAndDateUtils.getCurrentDate()).thenReturn(currentDate);
Assert.assertTrue(myStrategy.shouldBeExtracted(argument))
如何强制MyStrategy-Class使用模拟对象而不是自己创建对象?
最佳答案
Mockito有一个不错的类,用于覆盖类中的私有对象。它称为WhiteBox。它像这样工作
MyStrategy myStrategy = new MyStrategy();
TimeAndDateUtils timeAndDateUtils = Mockito.mock(TimeAndDateUtils.class);
Whitebox.setInternalState(myStartegy, "timeAndDateUtils", timeAndDateUtilsMock);
这将更改您的模拟的TimeAndDateUtils