如何用Java编写一个测试,检查对象是否正在JMock或JUnit中使用?

如何用Java编写一个测试,检查对象是否正在JMock或JUnit中使用?,java,testing,junit,jmock,Java,Testing,Junit,Jmock,我正在为一个Java程序编写一些测试,我需要测试我的对象是否被添加到列表中x次 下面是一个假设的代码片段 ObjectWithList objectWithList = new ObjectWithList(); JMock context = new JMock(); ObjectInterface oInterfaceMock = (ObjectInterface)context.mock(ObjectInterface.class); context.checking(new

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

下面是一个假设的代码片段

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上搜索以前的问题,但我没有运气


非常感谢大家,任何帮助我们都将不胜感激

我建议在没有JMock的情况下这样做。您只需编写一个函数,计算列表包含对象的次数:

public int getCount(List<?> list, Object object) {
  int count = 0;
  for (Object element : list) {
    if (object.equals(element)) {
      count++;
    }
  }
  return count;
}
public int getCount(列表,对象){
整数计数=0;
for(对象元素:列表){
if(object.equals(元素)){
计数++;
}
}
返回计数;
}
还有其他可能的实现,但这一个显然是正确的。接下来,您可以编写断言:

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);
}
public void资产外观(列表、对象、int n){
if(n==getCount(列表,对象)){
回来
}
失败(“对象”+对象+”未出现在列表中”
+n+“次:“+列表);
}

您想调用一个方法
X
,该方法用对象
Y
n次填充
objectWithList
?方法
X
不会出现在代码段中,对象
Y
可能是
oInterfaceMock
,但它可以是一个简单的对象,无需对其进行模拟。我理解你的问题了吗?然后将方法
X
的调用添加到代码段中,并指出
objectWithList
是如何在该方法中填充的(它是
X
的参数还是
X
s对象的字段)。