在JUnit测试中,我需要测试给定对象(不是引用,但是对象的属性)不在列表中。最好的方法是什么?
答案 0 :(得分:4)
假设您正在使用当前版本的JUnit,最好的方法是为您的类型对象列表编写自己的Matcher。
创建一个扩展org.hamcrest.TypeSafeMatcher
的类并实现给定的方法。
为您的类添加静态构造函数方法,以便您可以在assertThat
语句中轻松调用它,并移交不应包含的对象示例。
在matchesSafely()
方法中,确保您的列表中不包含与样本属性匹配的对象。
作为替代方案,在您的对象上实现equals
,创建一个示例,然后执行
assertThat(yourList,not(hasItem(yourSample)));
,其中not
是CoreMatchers
的静态导入,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));