Jmockit:Expectations()适用于v12但不适用于v13 / v14(Java SE 8,TestNG 6.8.13)

时间:2014-12-31 23:00:25

标签: java unit-testing testng jmockit

使用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);
  }
};

1 个答案:

答案 0 :(得分:0)

测试失败,因为它冗余地记录了两次相同的期望。相反,通过使用整个所需返回值序列调用返回来记录一次,因为它是一个varargs方法。

JMockit 1.13中的语义更改是为了防止错误排除这一点,但针对重复期望的验证仍然是一个未解决的问题,需要在1.15版本中修复。

相关问题