Kotlin, как создать собственное утверждение с помощью assertj - PullRequest
0 голосов
/ 03 мая 2019

Я хотел бы создать пользовательское утверждение в том же файле моего тестового кода.

То, что я сделал, это

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.
}

1 Ответ

1 голос
/ 03 мая 2019

Как описано здесь (официальная документация 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 в порядке, и использовал ее повторнов моем собственном классе утверждения.В целях тестирования вы можете изменить его, разбив его на первую строку и прокомментировав остальную часть функции, чтобы сосредоточиться на реализации пользовательских утверждений ...

Надеюсь, это поможет вам достичь своей цели!

...