我正在使用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);

10-08 06:31