Java Junit断言
**我正在比较csv和db数据之间的两个列表,但我返回void,因此我的断言不起作用。断言将起作用的更改应该是什么。我尝试过将返回值放在匹配查找的下面,并将返回类型更改为布尔值,但它不起作用Java Junit断言,java,junit,Java,Junit,**我正在比较csv和db数据之间的两个列表,但我返回void,因此我的断言不起作用。断言将起作用的更改应该是什么。我尝试过将返回值放在匹配查找的下面,并将返回类型更改为布尔值,但它不起作用 public static boolean compareTwoLists(List<Map<String, String>> csvData, List<Map<String, String>> sqlData) { // Comparat
public static boolean compareTwoLists(List<Map<String, String>> csvData, List<Map<String, String>> sqlData) {
// Comparator on basis of product Code
Comparator<Map<String, String>> comp = (o1, o2) -> {
return o1.get("productcode").compareTo(o2.get("productcode"));
};
System.out.println("Test");
Collections.sort(csvData, comp);
Collections.sort(sqlData, comp);
System.out.println("testdef");
for (Map<String, String> i : sqlData) {
if (csvData.contains(i)) {
System.out.println("Match Found " + i);
return true;
}else{
System.out.println(" No Match Found ");
}
}
return false;
}
public static List<Map<String, String>> convertToMapFromCsv(String filePath)
throws FileNotFoundException, IOException {
BufferedReader in = new BufferedReader(new FileReader(filePath));
List<Map<String, String>> namefreq = in.lines().skip(1).map(line -> line.split(COMMA)) // splitting csv
.map(line -> {
Map<String, String> map = new HashMap<>();
map.put("productcode", line[0]);
map.put("store", line[1]);
map.put("itemavailabilityscore", line[2]);
map.put("salesunitscore", line[3]);
map.put("totalscore", line[4]);
map.put("pdp_views", line[5]);
return map;
}).collect(Collectors.toList());
System.out.println("testabc");
return namefreq;
}
}
**//junit assertion**
In this new generic is of type List<Map<String,String>> newGeneric which return the db data.FileComparatorUtility is class and the method compareTwoLists is declared above
您是否至少获得了正确的输出(我的意思是,如果它在应该的时候显示“已找到匹配项”)
您的地图列表是否从输入文件正确解析?
如果两者都是真的,那么问题来自不同的地方 在有问题的评论中,您的意思是,如果列表之间有一条记录不匹配,则断言应该失败。
当给定布尔表达式的计算返回false时,
assertFalse(boolean)
失败。但是,还有一个
在调用compareTowolists
之前,code>(布尔否定),因此compareTowolists
方法必须返回false
,并且由于的原因,返回的false
将被反转为true
代码>操作员。因此,当整个表达式的计算结果为true
时,断言将失败
这样,当“未找到匹配项”时,compareTowolists
方法应返回false
,如果每个元素都匹配(在循环之后),则返回true
“未找到匹配项”表示两个列表之间不匹配,如果返回false
,则断言也将失败
一些旁白:
您的问题中没有关于您需要如何准确比较这些列表的信息。是否需要在sql列表中找到csv列表中的所有元素,或者以其他方式(csv中的所有sql)或两个列表应彼此相等
当在较大的列表中循环时,可以确定较小的列表不会包含给定元素的任何部分(至少在没有重复项的情况下)。
对于完全相等,您可以在排序列表上使用listA.equals(listb)
。
根据哪个列表必须包含另一个列表的元素,您需要在for循环和if contains check中适当地使用它
我假设所有csv元素都必须在sql列表中找到。循环使用sql数据可能就足够了,但如果一个列表的元素比另一个列表的元素多怎么办?
如果要检查所有csv数据是否都在sql中,则应循环查看csv数据。csv中的元素可能比sql多,而sql数据中可能找不到这些多余的列表元素。但是,如果在sql数据中找到csv数据中的其他元素时,csv数据可以有其他元素,则可以通过sql数据进行循环。
如果sql数据中的数据多于csv数据中的数据,则csv肯定不会包含sql的某些元素(当这些元素不重复时)。
所以在这里,它应该在csv数据中循环,并检查其元素是否包含在sql数据中
无论如何,如果您想检查是否可以在sql数据中找到csv数据的每个元素,那么您应该循环使用csv数据。这将测试sql数据是否包含csv数据中的每个元素
使用您提供的代码示例和我上面的话,CompareTowolists
的最后一部分可以更改为:
for (Map<String, String> i : csvData) {
if (!sqlData.contains(i)) {
System.out.println(" No Match Found: " + i);
return false;
}
}
return true;
如果您确定两个列表中的每个映射元素都有“productcode”,那么您的comparator函数就可以了。
但是,如果一个映射条目都不包含“productcode”键,则会从sort
方法抛出NullPointerException,因为其中一个参数可能为null。
您的正确实现取决于我提到的其他情况,但对于大多数情况,您需要检查comparator函数中的两个参数在“productcode”键下是否都有一些(非空)值,例如:
Comparator<Map<String, String>> comp = (o1, o2) -> {
if (o1.get("productcode") == null) {
return -1;
}
if (o2.get("productcode") == null) {
return 1;
}
return o1.get("productcode").compareTo(o2.get("productcode"));
};
比较器组件=(o1,o2)->{
if(o1.get(“productcode”)==null){
返回-1;
}
if(o2.get(“productcode”)==null){
返回1;
}
返回o1.get(“productcode”)。与(o2.get(“productcode”))进行比较;
};
对于冗长的回答,很抱歉,如果这些解释和IDK对其他人有用的话,您可能不需要这些解释和IDK,但让我们把它留在这里吧。:) 这回答了你的问题吗?正如您已经看到的,void
不能用于断言。简单地说,将方法返回类型从void
更改为boolean
和return true
而不是break
,并在循环return true
的主体之后。我对其进行了修改。请参见。我们是否可以更好地检查数据库中的记录何时与CSV匹配,以及是否有单个记录不匹配然后断言应该失败谢谢你的回答。我将更改assertTrue(FileComparatorUtility.CompareTwoolists(csvData,newGeneric));如果找到匹配项,则返回true,如果没有匹配项,则返回fail。是的,该部分如何?好的,只是说,如果找到单个匹配项,则返回true将不会检查其他元素是否也匹配。那么在这种情况下,如果其他元素之间存在不匹配,那么应该怎么做
for (Map<String, String> i : csvData) {
if (!sqlData.contains(i)) {
System.out.println(" No Match Found: " + i);
return false;
}
}
return true;
list.sort(comp)
Comparator<Map<String, String>> comp = (o1, o2) -> {
if (o1.get("productcode") == null) {
return -1;
}
if (o2.get("productcode") == null) {
return 1;
}
return o1.get("productcode").compareTo(o2.get("productcode"));
};