有没有办法每次使用 EasyMock return anyTimes() 返回一个新对象?

问题描述

我正在为一个严重依赖日历的类进行单元测试。我正在尝试模拟所有调用,以便我基本上可以将我自己指定的系统时间插入到类中以进行一些日期时间逻辑测试。

这是我的第一次尝试:

Calendar fixedSystemCal = Calendar.getInstance();
fixedSystemCal.set(2021,Calendar.FEBRUARY,22,18,0);

PowerMock.mockStatic(Calendar.class);
EasyMock.expect(Calendar.getInstance()).andReturn(fixedSystemCal).anyTimes();
PowerMock.replay();

不幸的是,经过一番摸索,我发现这行不通,因为日历对象在类中发生了变异。由于这个模拟每次返回相同的日历,这是一个问题。例如:

Calendar firstCall = Calendar.getInstance(); //Feb 22
firstCall.add(Calendar.DATE,5); //Feb 27

Calendar secondCall = Calendar.getInstance() // This is also Feb 27 now

有什么办法可以每次都取回不同的日历对象(对于任意数量的调用)?到目前为止,我找到的唯一解决方案就是像这样重复多次:

Calendar fixedSystemCal = Calendar.getInstance();
fixedSystemCal.set(2021,0);

PowerMock.mockStatic(Calendar.class);
EasyMock.expect(Calendar.getInstance()).andReturn((Calendar) fixedSystemCal.clone()).andReturn((Calendar) fixedSystemCal.clone()).andReturn((Calendar) fixedSystemCal.clone());
PowerMock.replay();

我将在下一步中用 Java 时间替换这段代码,但我需要一个功能正常的单元测试才能进行更改。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)