使用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中将“Expectations”更改为“StrictExpectations”,则没有断言失败。
我从JMockit change log看到对v13中的Expectations
进行了更改,因此可能,我不明白更改日志中有关预期内容的说明。但似乎这种变化并不是向后兼容的。
为什么“Strict”有效并且“NonStrict”没有 - 我很期待“严格”成功,“NonStrict”也会成功。
我做错了什么?
<小时/> 更新:
使用Rogério的答案,以下更改消除了问题:
new Expectations()
{
{
myClass.getValue();
returns(8, 4);
}
};
答案 0 :(得分:0)
测试失败,因为它冗余地记录了两次相同的期望。相反,通过使用整个所需返回值序列调用返回来记录一次,因为它是一个varargs方法。
JMockit 1.13中的语义更改是为了防止错误排除这一点,但针对重复期望的验证仍然是一个未解决的问题,需要在1.15版本中修复。