Java 使用containing在testng中断言

Java 使用containing在testng中断言,java,eclipse,testng,assert,Java,Eclipse,Testng,Assert,我正在使用Java和testng。我有两组字符串:validSet和actualSet。 我想通过assert检查actualSet中的所有内容是否都在validSet中(即actualSet(-validSet)。(我使用(-to表示的是的子集)。 有一个assertContains(desc,collection1,object)。我尝试了这个方法,但它使用了我的actualSet并将其放入字符串形式中,如“[item1,item2,item3]”,而不是将其作为一个集合 存在一个包含两个集

我正在使用Java和testng。我有两组字符串:validSet和actualSet。 我想通过assert检查actualSet中的所有内容是否都在validSet中(即actualSet(-validSet)。(我使用(-to表示的是的子集)。 有一个assertContains(desc,collection1,object)。我尝试了这个方法,但它使用了我的actualSet并将其放入字符串形式中,如“[item1,item2,item3]”,而不是将其作为一个集合

存在一个包含两个集合的assertCollectionEquals()。我想如果我可以删除validSet中不在actualSet中的所有内容,那么我可以检查这两个集合是否相等。如果它们不相等,那么我知道actualSet不包含在validSet中

我可以这样做:

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);
boolean fail=false;
List actNotInValid=新建ArrayList();
用于(字符串行为:实际){
如果(!validSet.contains(act)){
失败=正确;
ACTNOT无效。添加(act);
}
}
assertFalse(actNotInValid.toString(),失败);

谢谢。是的,我确实想到了。只是不确定它有多雄辩;-)但我认为它比我想做的更清楚。