我是Kotlin Android的新手,所以在编写测试时,这些断言意外传递:
import org.junit.Test
assert("x".equals("y"))
assert("x" == "y")
但这确实失败了:
import junit.framework.Assert.assertEquals
assertEquals("x", "y")
所以我查看了字符串结构比较。
然后发现这也通过了:
assert(false)
看起来org.junit.Test默认出现在新项目中:
testImplementation 'junit:junit:4.12'
所以现在我想知道要同步的正确testImplementation包是什么。我使用了错误的吗?
答案 0 :(得分:3)
您正在使用仅在启用平台断言时启用的kotlin.assert
。您所说的检查应该导致错误,从不执行。
使用-ea
(启用断言)JVM参数运行它或使用assertEquals
这是通常的测试框架名称,因为assert
是java中的关键字。
答案 1 :(得分:3)
来自assert
(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/assert.html)的文档:
如果值为false且运行时断言,则抛出AssertionError 已使用-ea JVM选项在JVM上启用。
您应该使用来自Assert.assertTrue
的{{1}}或Assert.assertEquals
代替。
答案 2 :(得分:-3)
查找内部文档,assertEquals没有两个String参数可供比较。它只接收通用对象:
assertEquals(java.lang.Object expected,java.lang.Object actual)=> 断言两个对象是相等的。
字符串应使用.equals(String)
方法进行比较,因为对象具有不同的地址内存访问权限,因此尽管它们具有相同的内容,但它们是不同的。
::编辑::
要使用相同的对象类型的字符串,您应该使用.clone()
方法。它从原始对象返回相同的内容和相同的引用。