[英]Jmockit: Expectations() works in v12 but not in v13/v14 (Java SE 8, TestNG 6.8.13)
使用JMockit v12,此测试通过(不是真实的代码,但说明了问题):
import mockit.Expectations;
import mockit.Mocked;
import org.testng.Assert;
import org.testng.annotations.Test;
public class JmockitExperimentsTest2
{
public class MyClass
{
public int getValue()
{
return 5;
}
}
@Mocked
MyClass myClass;
@Test ()
public void jmockitTest()
{
new Expectations()
{
{
myClass.getValue();
returns(8);
myClass.getValue();
returns(4);
}
};
Assert.assertEquals(myClass.getValue(), 8);
Assert.assertEquals(myClass.getValue(), 4);
}
}
使用JMockit v13(和v14),它会得到以下断言失败:
java.lang.AssertionError: expected [8] but found [4]
如果我使用“ NonStrictExpectations”代替“ Expectations”,则在v13 / v14中会出现相同的断言失败。 但是,如果在v13 / v14中将“期望”更改为“ StrictExpectations”,则不会有断言失败。
我从JMockit更改日志中看到,对v13中的Expectations
进行了更改,大概是这样,我不理解更改日志中关于期望内容的描述。 但似乎此更改不向后兼容。
我感到非常困惑,为什么“严格”有效而“非严格”无效—我希望“严格”成功的时候,“非严格”也会成功。
我究竟做错了什么?
使用Rogério的答案,以下更改消除了该问题:
new Expectations() { { myClass.getValue(); returns(8, 4); } };
测试失败,因为它两次重复记录了相同的期望。 相反,通过调用带有所需返回值的整个序列的return记录一次,因为它是varargs方法。
在JMockit 1.13中进行了语义更改,以防止出现此错误,但是针对重复期望的验证仍然是一个未解决的问题,将在1.15版中修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.