Как не допустить, чтобы Спок рассматривал null как строку («null») с ObjectMapper в тестовых случаях? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующий пример модульного теста Спока:

given:
ObjectMapper mapper = new ObjectMapper()
def eventNode = mapper.valueToTree([
    person         : [
        name       : year,
        location.  : location,
    ]
])

.
.
.

where:
name  | location
'Tom' | null

Он обрабатывает null в тестовом примере как строку "null" и поэтому проходит проверки if, такие как if(location != null)...

Как я могу сделать это не строкой (Пустая строка '' рассматривается как "''")?

1 Ответ

2 голосов
/ 08 апреля 2020

Скорее всего, location анализируется в NullNode. Значение toString() для NullNode действительно является строкой "null", но textValue() является ссылкой null. Обратите внимание, что даже TextNode дает разные результаты для toString() и textValue(). Вы должны вызвать соответствующий метод для вашего теста.

def jacksonNull() {
    given:
        ObjectMapper mapper = new ObjectMapper()
        ObjectNode eventNode = mapper.valueToTree([
            person        : [
                name      : name,
                location  : location,
            ]
        ])
        JsonNode nameNode = eventNode.get('person').get('name')
        JsonNode locationNode = eventNode.get('person').get('location')

    expect:
        nameNode.isTextual()
        nameNode.textValue() == 'Tom'
        nameNode.toString() == '"Tom"'

        locationNode.isNull()
        locationNode.textValue() == null
        locationNode.toString() == 'null'

    where:
        name  | location
        'Tom' | null
}
...