使用不同的 return 值模拟 public 静态方法
Mock a public static method with different return values
此代码应该检查一个小时是否已过,然后执行特定操作。为了模仿这一点,我在 JMockit 中模拟 ZonedDateTime class 并希望它是现在方法 (ZonedDateTime.now(ZoneOffset.UTC);
) 到 return 在我的代码执行期间的两个不同值。我的第一次尝试涉及静态方法的以下模拟实现:
ZonedDateTime instantExpected = ZonedDateTime.now(ZoneOffset.UTC);
new Expectations(ZonedDateTime.class) {{
ZonedDateTime.now(ZoneOffset.UTC);
result = instantExpected;
}};
上面的代码确保每次调用函数时都在同一瞬间得到 returned,但它不允许我在函数调用一定次数后更改值。我想要类似于下面代码应该如何工作的东西。
ZonedDateTime instantExpected = ZonedDateTime.now(ZoneOffset.UTC);
new Expectations(ZonedDateTime.class) {{
ZonedDateTime.now(ZoneOffset.UTC);
result = instantExpected;
times = 2; // the first two times it should return this value for "now"
ZonedDateTime.now(ZoneOffset.UTC);
result = instantExpected.plusHours(1L);
times = 1; // the third time it should return this new value for "now"
}};
我如何模拟一个 public 静态方法并为同一个函数设置 return 不同的值?
在 Expectations 块中作为结果返回一个时间列表就完成了这项工作。
ZonedDateTime instantExpected = ZonedDateTime.now(ZoneOffset.UTC);
ZonedDateTime secondInstant = instantExpected.plusHours(1L);
List<ZonedDateTime> allTimes = new ArrayList<ZonedDateTime>();
allTimes.add(instantExpected);
allTimes.add(instantExpected);
allTimes.add(secondInstant);
new Expectations(ZonedDateTime.class) {{
ZonedDateTime.now(ZoneOffset.UTC);
result = allTimes;
}};
此代码应该检查一个小时是否已过,然后执行特定操作。为了模仿这一点,我在 JMockit 中模拟 ZonedDateTime class 并希望它是现在方法 (ZonedDateTime.now(ZoneOffset.UTC);
) 到 return 在我的代码执行期间的两个不同值。我的第一次尝试涉及静态方法的以下模拟实现:
ZonedDateTime instantExpected = ZonedDateTime.now(ZoneOffset.UTC);
new Expectations(ZonedDateTime.class) {{
ZonedDateTime.now(ZoneOffset.UTC);
result = instantExpected;
}};
上面的代码确保每次调用函数时都在同一瞬间得到 returned,但它不允许我在函数调用一定次数后更改值。我想要类似于下面代码应该如何工作的东西。
ZonedDateTime instantExpected = ZonedDateTime.now(ZoneOffset.UTC);
new Expectations(ZonedDateTime.class) {{
ZonedDateTime.now(ZoneOffset.UTC);
result = instantExpected;
times = 2; // the first two times it should return this value for "now"
ZonedDateTime.now(ZoneOffset.UTC);
result = instantExpected.plusHours(1L);
times = 1; // the third time it should return this new value for "now"
}};
我如何模拟一个 public 静态方法并为同一个函数设置 return 不同的值?
在 Expectations 块中作为结果返回一个时间列表就完成了这项工作。
ZonedDateTime instantExpected = ZonedDateTime.now(ZoneOffset.UTC);
ZonedDateTime secondInstant = instantExpected.plusHours(1L);
List<ZonedDateTime> allTimes = new ArrayList<ZonedDateTime>();
allTimes.add(instantExpected);
allTimes.add(instantExpected);
allTimes.add(secondInstant);
new Expectations(ZonedDateTime.class) {{
ZonedDateTime.now(ZoneOffset.UTC);
result = allTimes;
}};