gpt4 book ai didi

spring-mvc - Kotlin如何使用assertj创建自定义断言

转载 作者:行者123 更新时间:2023-12-02 13:21:14 28 4
gpt4 key购买 nike

我想在测试代码的同一文件中创建自定义断言。

我所做的是

fun String?.isValidJson(): Boolean {
try {
JSONObject(this)
} catch (ex: JSONException) {
// e.g. in case JSONArray is valid as well...
try {
JSONArray(this)
} catch (ex1: JSONException) {
return false
}
}
return true
}

@Test
fun `Check body is valid json`() {
// ...
assertThat(entity.body.isValidJson()).isTrue()
}

但是,它看起来并不专业,我想自定义自己的断言:
assertThat(entity.body).isValidJson()

我在IntelliJ的帮助下尝试了很多方法,但都失败了。
任何人都可以创建这个吗?

这是IntelliJ自动生成的功能,该功能不起作用:
private fun <SELF, ACTUAL> AbstractCharSequenceAssert<SELF, ACTUAL>.isValidJson() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

最佳答案

here(AssertJ官方文档)所述,您可以通过以下方式获得所需的结果:

import JsonAssert.Companion.assertThatJson
import org.assertj.core.api.AbstractAssert
import org.junit.Test

fun String?.isValidJson(): Boolean {
// return this == "valid"
try {
JSONObject(this)
} catch (ex: JSONException) {
// e.g. in case JSONArray is valid as well...
try {
JSONArray(this)
} catch (ex1: JSONException) {
return false
}
}
return true
}

class JsonAssert(value: String) : AbstractAssert<JsonAssert, String>(value, JsonAssert::class.java) {
fun isValid() : JsonAssert {
if(!actual.isValidJson()) {
failWithMessage("Actual value <%s> is not a valid JSON", actual);
}
return this
}

companion object {
fun assertThatJson(value: String) : JsonAssert {
return JsonAssert(value)
}
}
}

class ScratchTest {
@Test
fun `Check body is valid json`() {
val value = "valid"

assertThatJson(value).isValid()
}
}

我以为您可以实现 fun String?.isValidJson(): Boolean并可以在我的自定义断言类中重用它。出于测试目的,您可以在第一行进行分解,然后对其进行注释,以专注于自定义断言的实现...

希望这可以帮助您实现目标!

关于spring-mvc - Kotlin如何使用assertj创建自定义断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55962645/

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