首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将空安全和assertNotNull结合起来

将空安全和assertNotNull结合起来
EN

Stack Overflow用户
提问于 2017-02-05 03:32:46
回答 2查看 4.7K关注 0票数 15

在测试中,我们通常使用assertNotNull,但它不执行从可空类型到非空类型的智能转换。我必须写这样的东西:

代码语言:javascript
运行
复制
if (test == null) {
    Assert.fail("")
    return
}

只使用assertNotNull调用执行智能强制转换是一种解决办法吗?你是怎么处理的?

EN

回答 2

Stack Overflow用户

发布于 2019-01-22 13:59:01

kotlin.test库提供了一个简单的解决方案:

kotlin.test.assertNotNull()

因为这个函数实现了Kotlin契约,所以它支持智能转换:

contract { returns() implies (actual != null) }

示例:

代码语言:javascript
运行
复制
    fun Foo?.assertBar() {
        assertNotNull(this)
        assertEquals(this.bar, 0)
    }

只需确保使用正确的(import kotlin.test.assertNotNull)!导入assertNotNull

如果尚未使用kotlin.test库,请将其添加到项目中:

group: 'org.jetbrains.kotlin', name: 'kotlin-test', version: '1.3.11

票数 4
EN

Stack Overflow用户

发布于 2020-11-18 11:05:53

非常感谢@Rolf向我指出了科特林试验库在他的答案这里中提供的科特林试验方法。

我只想添加并指出,这个方法有一个非空返回类型(也就是说,它返回作为非空对象传递给它的可空对象)。因此,如果您在测试中强制展开属性,您可以从这一点出发,改进测试,如下所示:

代码语言:javascript
运行
复制
val myProperty = assertNotNull(myObject?.myProperty)
assertEquals("Foo", myProperty.someOtherProperty)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42048266

复制
相关文章

相似问题

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