首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >意外断言行为

意外断言行为
EN

Stack Overflow用户
提问于 2018-06-15 13:34:31
回答 3查看 709关注 0票数 3

我对Kotlin Android并不熟悉,所以在编写测试时,这些断言出乎意料地通过:

代码语言:javascript
运行
复制
import org.junit.Test

assert("x".equals("y"))
assert("x" == "y")

但这确实失败了:

代码语言:javascript
运行
复制
import junit.framework.Assert.assertEquals
assertEquals("x", "y")

所以我复习了字符串的结构比较。

然后发现这也过去了:

代码语言:javascript
运行
复制
assert(false)

看起来org.junit.Test默认出现在一个新项目中,它通过:

代码语言:javascript
运行
复制
testImplementation 'junit:junit:4.12'

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-15 13:53:33

来自assert (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/assert.html)的文档:

如果值为false,并且已使用AssertionError选项在JVM上启用运行时断言,则抛出一个-ea。

您应该做的是使用Assert.assertTrue或来自org.junitAssert.assertEquals

票数 3
EN

Stack Overflow用户

发布于 2018-06-15 13:48:32

您使用的是kotlin.assert,只有在启用平台断言时才启用它。您认为应该导致错误的检查永远不会执行。

要么使用-ea (启用断言) JVM参数运行它,要么使用assertEquals,这是通常的测试框架名称,因为assert是java中的关键字。

票数 3
EN

Stack Overflow用户

发布于 2018-06-15 13:42:49

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

assertEquals(java.lang.Object expected,java.lang.Object => )=>断言两个对象相等。

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

::编辑::

要拥有String的sames对象类型,您应该使用.clone()方法。它从原始对象返回相同的内容和相同的引用。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50876703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档