我正在使用旧代码,并希望增加其测试范围。

我有一个像这样的课程:

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

09-11 18:30