JUnit:测试对象不在列表中

时间:2011-06-29 12:21:28

标签: java list junit

在JUnit测试中,我需要测试给定对象(不是引用,但是对象的属性)不在列表中。最好的方法是什么?

6 个答案:

答案 0 :(得分:4)

假设您正在使用当前版本的JUnit,最好的方法是为您的类型对象列表编写自己的Matcher。

创建一个扩展org.hamcrest.TypeSafeMatcher的类并实现给定的方法。 为您的类添加静态构造函数方法,以便您可以在assertThat语句中轻松调用它,并移交不应包含的对象示例。 在matchesSafely()方法中,确保您的列表中不包含与样本属性匹配的对象。

作为替代方案,在您的对象上实现equals,创建一个示例,然后执行 assertThat(yourList,not(hasItem(yourSample)));,其中notCoreMatchers的静态导入,hasItem是来自JUnitMatchers的静态导入。

当然,实施equals后,您可以简单assertFalse(yourList.contains(yourSample));

答案 1 :(得分:2)

如果我理解你的问题:

Object o =....; //some object
assertFalse(list.contains(o));

如果已正确实施对象equals()方法,则此方法可行。

答案 2 :(得分:2)

我假设做一个简单的contains()不够深入检查?如果你已经覆盖了对象的equals()方法,那么list.contains(o)就可以了。

答案 3 :(得分:0)

如果您在列表中存储的对象实施equals以匹配这些属性,那么list.contains(o)list.indexOf(o)将为您提供答案。

如果你的对象没有实现equals,那么这些方法将根据引用相等性(而不是你想要的)来回答。

答案 4 :(得分:0)

@Test
public void testContains() {
    String demoObject = "Testing!";
    //myList isa List<String>
    assertFalse("Object was in collection", myList.contains(demoObject));
}

答案 5 :(得分:0)

如果我理解你想断言列表中某些对象的属性与某些东西不相等...... 如果您可以使用公共集合(http://commons.apache.org/collections/),则可以使用界面 org.apache.commons.collections.Predicate 在列表中进行搜索(使用方法 org.apache .commons.collections.CollectionUtils.find(List,Predicate)

你可以像

那样做
Predicate p = new Predicate(){
    /*
     * Test if the object has the value that you don't want
     */
    public boolean evaluate(java.lang.Object object){
         YourObject yo = (YourObject) object;
         return yo.getProperty().equals(theValue);
    }
}
//if is return null means that nothing was found
assertNull(CollectionUtils.find(yourList, p));