gpt4 book ai didi

java - 字符串空测试中的错误值 (java x kotlin)

转载 作者:行者123 更新时间:2023-12-02 01:49:31 25 4
gpt4 key购买 nike

我正在测试的代码出现了非常奇怪的行为。我编写的测试是为了查看 Android 返回空包名称时类的行为。经过一番调试后,我发现了这一点(考虑 packageName 为):

 val resultFromKotlin = packageName.isNullOrEmpty()
val resultFromJava = StringUtils.isEmpty(packageName)

Image from Andriod Studio debug

这是预期的吗?有人能告诉我这是怎么回事吗?

ps1.:在上图中,Android Studio 提示 isNullOrEmpty 说可以简化,因为 packageName 此时不能为 null。

ps2.:供引用:

StringUtils类用Java编写如下:

public static boolean isEmpty(String str) {
return str == null || TextUtils.isEmpty(str.trim());
}

TextUtils 也来自 Java,但它是 Android 库的一部分:

public static boolean isEmpty(@Nullable CharSequence str) {
return str == null || str.length() == 0;
}

这就是 kotlin 实现其扩展方法的方式:

public inline fun CharSequence?.isNullOrEmpty(): Boolean {
contract {
returns(false) implies (this@isNullOrEmpty != null)
}

return this == null || this.length == 0
}

编辑 2018 年 8 月 11 日:只是为了澄清,我的问题是从 Java 返回的错误值,而不是在测试中搜索等价项: enter image description here

最佳答案

这似乎是运行测试时 TextUtils 的问题。

If you are running unit tests, Android frameworks methods are mocked, and this one in particular returns false. Use instrumentation tests to run against a full Android runtime.

Here这是讨论问题的地方。

我已经通过重新创建该函数进行了手动测试,它返回 true。

我建议使用 Apache Commons StringUtils 实现:StringUtils

关于java - 字符串空测试中的错误值 (java x kotlin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53211548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com