Android 意外的断言行为

Android 意外的断言行为,android,unit-testing,kotlin,Android,Unit Testing,Kotlin,我是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默认通过以下方式出现在

我是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'

所以现在我想知道要同步的正确测试实现包是什么。我用错了吗?

在查找内部文档时,assertEquals没有两个字符串参数可供比较。它只接收一般对象:

assertEquals(预期为java.lang.Object,实际为java.lang.Object)=> 断言两个对象相等

字符串应该使用
.equals(String)
方法进行比较,因为使用对象的地址内存访问不同,所以尽管它们具有相同的内容,但它们是不同的

::编辑::

要获得sames对象类型的字符串,应使用
.clone()
方法。它从原始对象返回相同的内容和引用。

您正在使用的内容和引用只有在启用平台断言时才会启用。您所说的应该导致错误的检查永远不会执行


使用
-ea
(enable assertions)JVM参数运行它,或者使用
assertEquals
,这是常用的测试框架名称,因为
assert
在java中是一个关键字。

来自
assert
()的文档:

如果值为false,则引发AssertionError,并引发运行时断言 已使用-ea JVM选项在JVM上启用

您应该使用
org.junit
中的
Assert.assertEquals
Assert.assertEquals