我正在使用Java和testng。我有两组字符串:validSet和actualSet。
我想通过断言检查,actualSet中的所有内容都在validSet中(即,actualSet(-validSet。)(我正在使用(-表示其子集))。
有一个assertContains(desc,collection1,object)。我尝试了此操作,但是它使用了我的ActualSet并将其放置为字符串形式,例如“ [item1,item2,item3]”,而不是将其视为集合。
有一个带有两个集合的assertCollectionEquals()。我想知道是否可以删除validateSet中所有不存在于ActualSet中的内容,然后可以检查两者是否相等。如果它们不是,那么我知道validSet中不包含actualSet。
我可以做以下事情:
for (String act : actual ) {
assertTrue( act + " is not valid", validSet.contains(act);
}
但是关于集合的好处是断言它们将列出不在validSet中的每个字符串,而上面的示例将仅列出第一个遇到的字符串,然后失败。
我试图考虑调用的方法,以便比较两个集合应该相等。如何从一个集合中删除不在另一个集合中的所有值?
谢谢
最佳答案
一种解决方案是使用循环构建您的错误消息,然后在循环后使用该错误消息进行断言。就像是:
boolean fail = false ;
List<String> actNotInValid = new ArrayList<>();
for(String act: actual) {
if(!validSet.contains(act)) {
fail = true ;
actNotInValid.add(act);
}
}
assertFalse(actNotInValid.toString(), fail);