尝试检查列表中是否存在多个关键字。
List<String> array=new ArrayList<String>();
array.add("Sam Mayers test");
array.add("");
array.add("value");
array.add("");
array.add("");
array.add("");
array.add("District 49");
array.add("Till the last test");
array.add("Dawn Strings");
array.add("Lists value");
array.add("");
array.add("");
array.add("Total Hits Lists");
array.add("Values");
Boolean found = false;
List<String> keywords_tobe_checked = new ArrayList<>();
keywords_tobe_checked.add("Lists");
keywords_tobe_checked.add("value");
keywords_tobe_checked.add("Mayers");
List<String> dummylist = new ArrayList<>();
for (int i = 0; i < array.size(); i++) {
String val = array.get(i);
for (int j = 0; j < keywords_tobe_checked.size(); j++) {
if (val.indexOf(keywords_tobe_checked.get(j)) >= 0) {
dummylist.add(val);
}
}
}
System.out.println(dummylist);
Assert.assertTrue(dummylist.containsAll(keywords_tobe_checked), "Its not correct");
我的上述代码在断言条件下失败并给我一个不正确的结果。
有没有办法通过"keywords_tobe_checked"中提到的所有关键字都出现在"虚拟列表"中的条件来传递此断言?
已尝试更新的代码:
List<String> array=new ArrayList<String>();
array.add("Sam Mayers test");
array.add("");
array.add("value");
array.add("");
array.add("");
array.add("");
array.add("District 49");
array.add("Till the last test");
array.add("Dawn Strings");
array.add("Lists value");
array.add("");
array.add("");
array.add("Total Hits Lists");
array.add("Values");
List<String> keywords_tobe_checked = new ArrayList<>();
keywords_tobe_checked.add("Lists");
keywords_tobe_checked.add("value");
keywords_tobe_checked.add("Mayers");
System.out.println(array);
System.out.println(keywords_tobe_checked);
for (String keyword : keywords_tobe_checked) {
Boolean found = false;
for (String value : array) {
if (value.contains(keyword)) {
found = true;
break;
}
Assert.assertTrue(found, "The keyword " + keyword + " not in the list");
}
}
Content of the Array------------ [Sam Mayers test, , value, , , , District 49, Till the last test, Dawn Strings, Lists value, , , Total Hits Lists, Values]
Content of the Keywords to be checked ----------------- [Lists, value, Mayers]
Exception in thread "main" java.lang.AssertionError: The keyword Lists not in the list expected [true] but found [false]
at org.testng.Assert.fail(Assert.java:94)
at org.testng.Assert.failNotEquals(Assert.java:496)
at org.testng.Assert.assertTrue(Assert.java:42)
当检查List
是否包含String
时,仅当存在完全匹配时,结果才会为真
array.contains("Lists"); // false
array.contains("Lists value"); // true
要检查部分匹配,您需要使用循环内的Assert.assertTrue
for (String keyword : keywords_tobe_checked) {
boolean hasKeyword = false;
for (String value : array) {
if (value.contains(keyword)) {
hasKeyword = true;
break;
}
}
Assert.assertTrue(hasKeyword, "The keyword " + keyword + " is in the list");
}
由于数组列表中的值,您在代码中执行的操作不正确。
使用containsAll
方法时,您要在数组列表中查找特定字符串。
例: 第一个列表具有对象Sam Mayers test
。 第二个列表具有对象Mayers
。
这就是你有断言错误的原因。Sam Mayers test
和Mayers
是完全不同的两个对象。