android - 在 Kotlin 中使用 check 验证字符串失败
问题描述
我有一个应用程序,用户必须输入不同的字符串。根据应用程序中字符串的性质,它必须遵循一些规则,例如,如果它是一个名称,则它必须以字母开头。
我写了一个规则来确保一个字符串是有效的,在一个必须以字母开头的字符串的情况下,我写了以下规则:
fun String.isFirstCharALetter(): Boolean = this[0].isLetter()
函数扩展检查适用于特定字符串的所有规则:
fun String.validateName(): String {
check(this.isFirstCharALetter()) { "The first character of a name can only be a letter" }
//... other checks
return this
}
仅当字符串有效时,我才使用此函数扩展来实例化 a Name
(至少这是我的意图):
data class Name(val value: String) {
companion object {
operator fun invoke(strg: String) {
Name(value= strg.validate())
}
}
}
我写了以下单元测试:
@Test
fun test_assert_name() {
assertFailsWith<IllegalStateException> { Name("8foo") }
}
由于8foo不是以字母开头的,所以我希望用这个字符串实例化IllegalStateException
a 时会引发异常,所以上面的测试必须成功。Name
但测试失败并显示以下消息:
java.lang.AssertionError: Expected an exception of class java.lang.IllegalStateException to be thrown, but was completed successfully.
有谁看到我在哪里做错了?
解决方案
要运行调用运算符,您需要调用
val name = Name("8foo")
name("8foo")
然后调用将被异常调用
也许您应该检查 init{} 部分的第一个字母?
class Name(private val string:String) {
init{
check(false){"Error"}
}
您还可以使用正则表达式检查字符串是否以字母开头
推荐阅读
- openmpi - Openmpi 与 CUDA 安装问题
- javascript - json模式验证后如何使joi输出所有带有路径的错误?
- bitbake - 什么是新的 IMAGE_DEPENDS_wic_append_suffix 表示法?
- r - 在具有书面功能的列子集上使用 lapply?
- php - Laravel 控制器显示错误尝试获取非对象的属性“地址”
- react-native - 在本机反应(Expo)中显示blob图像
- dll - 使用 Visual Studio 代码生成 C/C++ DLL
- css - 样式跨度线 i if-var 关系中的悬停效果
- c# - 使用 PsExec 和 C# 运行远程程序 - 已连接但无法正常工作
- yii2 - 如何修复 PHP 致命错误 – yii\base\ErrorException Class 'Swift_Transport_EsmtpTransport' not found