根据我正在测试的代码,我的行为异常奇怪。我编写的测试是在Android返回空包名称的情况下查看类的行为。经过一些调试后,我发现了这一点(考虑到packageName为空):
val resultFromKotlin = packageName.isNullOrEmpty()
val resultFromJava = StringUtils.isEmpty(packageName)
这是预期的吗?有人可以告诉我如何处理吗?
ps1:在上图中,Android Studio抱怨
isNullOrEmpty
表示可以简化,因为此时packageName
不能为null。ps2 ::供参考:
StringUtils
类用Java编写,如下所示:public static boolean isEmpty(String str) {
return str == null || TextUtils.isEmpty(str.trim());
}
TextUtils也是froJavava,但它是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
}
编辑08/11/2018:
只是为了澄清,我的问题是从Java返回的错误值,而不是在测试中寻找对等项,而且:
最佳答案
运行测试时,这似乎是TextUtils的问题。
如果您正在运行单元测试,则将模拟Android框架方法,尤其是此方法将返回false。使用检测测试可在完整的Android运行时上运行。
Here是讨论该问题的地方。
我已经通过重新创建该函数进行了手动测试,并且返回true。
我建议使用Apache Commons StringUtils实现:StringUtils