我对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包是什么。我用错了吗?
发布于 2018-06-15 13:53:33
来自assert (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/assert.html)的文档:
如果值为false,并且已使用AssertionError选项在JVM上启用运行时断言,则抛出一个-ea。
您应该做的是使用Assert.assertTrue或来自org.junit的Assert.assertEquals。
发布于 2018-06-15 13:48:32
您使用的是kotlin.assert,只有在启用平台断言时才启用它。您认为应该导致错误的检查永远不会执行。
要么使用-ea (启用断言) JVM参数运行它,要么使用assertEquals,这是通常的测试框架名称,因为assert是java中的关键字。
发布于 2018-06-15 13:42:49
在寻找内部文档时,assertEquals没有两个字符串参数可供比较。它只接收通用对象:
assertEquals(java.lang.Object expected,java.lang.Object => )=>断言两个对象相等。
字符串应该使用.equals(String)方法进行比较,因为使用对象具有不同的地址内存访问权限,因此尽管它们具有相同的内容,但它们是不同的。
::编辑::
要拥有String的sames对象类型,您应该使用.clone()方法。它从原始对象返回相同的内容和相同的引用。
https://stackoverflow.com/questions/50876703
复制相似问题