繁体   English   中英

Jmockit:Expectations()在v12中有效,但在v13 / v14中无效(Java SE 8,TestNG 6.8.13)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM