使用JUnit5测试用例比较两个二维数组时断言失败如何解决
问题原因
- 断言方法使用错误:JUnit5的
assertEquals用于比较数组时,本质是判断两个数组对象的内存地址是否相等(Java数组的equals方法继承自Object类,未重写为内容比较逻辑),哪怕两个多维数组的元素完全一致,只要是不同的实例对象,调用assertEquals都会返回失败。 - 手动构造的预期数组和实际结果存在内容差异:
- 预期数组
corpusB中写的是s melly(中间带空格),实际读取到的内容是smelly - 预期数组
corpusB中brother对应的翻译是frere,实际读取到的翻译是free
- 预期数组
解决方案
- 修正预期数组
corpusB的内容错误,和实际读取结果对齐:
String[][] corpusB = { {"the","le"}, {"the","la"}, {"jellyfish","meduse"}, {"boy","garcon"}, {"dances","danse"}, {"with","avec"}, {"lazy","paresseux"}, {"smelly","puante"}, // 去掉单词中间的空格 {"dog","chien"}, {"family","famille"}, {"house","maison"}, {"brother","free"}, // 修正为实际输出的翻译内容 {"sister","soeur"}, {"food","aliments"}, {"flower","fleur"}, {"in","dans"}, };
- 替换断言方法,使用JUnit5专门用于数组内容比较的
assertArrayEquals方法,该方法会递归比对多维数组的每个元素的内容:
// 替换原来的assertEquals assertArrayEquals(corpusB, corpusA);
内容的提问来源于stack exchange,提问作者Loïc Rutabana
相关产品推荐
相关产品推荐

