【问题标题】:How to write a test in Java that checks if an object is being used in JMock or JUnit?如何在 Java 中编写一个测试来检查对象是否在 JMock 或 JUnit 中使用?
【发布时间】:2015-05-03 02:33:59
【问题描述】:

我正在为 Java 程序编写一些测试,我需要测试我的对象是否被添加到 List x 次。

下面是一个假设的代码sn-p....

ObjectWithList objectWithList = new ObjectWithList();    

JMock context = new JMock();
ObjectInterface oInterfaceMock = (ObjectInterface)context.mock(ObjectInterface.class);

context.checking(new Expectations{{
    oneOf(oInterfaceMock).makeSureIamOnlyStoredSomewhereOnce();
}});

context.assertIsSatisfied(); // This will be successful if objectWithList calls add only 
//once. 

我不知道 JUnit 是否有更好的测试方法,任何帮助将不胜感激。我一直在尝试进行谷歌搜索,并在 Stack 上搜索以前的问题,但我没有运气。

非常感谢大家,任何帮助都非常感谢!

【问题讨论】:

  • 您想调用一个方法X,用对象Y 填充objectWithList n 次?方法X没有出现在你的代码sn-p中,对象Y大概是oInterfaceMock,不过可以是简单的对象,没必要mock。我明白你的问题了吗?然后将X方法的调用添加到你的sn-p中,并指出objectWithList在这个方法中是如何填充的(是X的参数还是Xs对象的字段)。

标签: java testing junit jmock


【解决方案1】:

我建议在没有 JMock 的情况下这样做。您可以简单地编写一个函数来计算列表包含对象的次数:

public int getCount(List<?> list, Object object) {
  int count = 0;
  for (Object element : list) {
    if (object.equals(element)) {
      count++;
    }
  }
  return count;
}

还有其他可能的实现,但这个显然是正确的。接下来,你可以写一个断言:

public void assertAppearsNTimes(List<?> list, Object object, int n) {
  if (n == getCount(list, object)) {
    return;
  }
  fail("Object " + object + " does not appear in list "
      + n + " times: " + list);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多