如何find哪个元素在Kotlin中的数组比较失败?

我正在为一个站点编写自动化测试。 有一个页面,所有的项目添加到购物车。 最大的项目是58.而不是validation每个元素一个接一个我决定创建2个arrays填充strings :1与正确的名称: String和1名称: String我从网站。 然后我将这两个数组与contentEquals进行比较。 如果这种比较失败了,我怎么知道究竟哪个元素导致了比较失败?

简单的我现在有什么:

 @Test fun verifyNamesOfAddedItems () { val getAllElementsNames = arrayOf(materials.text, element2.text, element3.text...) val correctElementsNames = arrayOf("name1", "name2", "name3"...) val areArraysEqual = getAllElementsNames contentEquals correctElementsNames if (!areArraysEqual) { assert(false) } else { assert(true) } } 

如果2个数组不一致,但是它不会显示细节,那么有没有办法看到更多的失败细节,例如失败的比较元素? 谢谢。

我建议在测试中使用像Hamcrest或AssertJ这样的匹配器库。 他们提供更好的错误消息,像这样的情况。 在这种情况下,Hamcrest会是:

 import org.hamcrest.Matchers.* assertThat(getAllElementsNames, contains(*correctElementsNames)) // or just assertThat(getAllElementsNames, contains("name1", "name2", "name3", ...)) 

还有专门为Kotlin制作的匹配器库: https : //github.com/kotlintest/kotlintest,https ://yobriefca.se/expect.kt/,https: //github.com/winterbe/expekt,https :/ /github.com/MarkusAmshove/Kluent ,可能更多。 使用它们的测试应该更具可读性,但是我没有尝试过其中的任何一个。 看看他们的文档和例子,并选择一个你喜欢的。

你需要find两个集合的交集。 交叉口将是共同的元素。 在从集合中删除交集合之后,您要执行测试将会为您提供补充元素。

 val intersection = getAllElementsNames.intersect(correctElementsNames) getAllElementsNames.removeAll(intersection)