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