如何防止 Spock 在单元测试用例中使用 ObjectMapper 将 null 视为字符串 ("null")?

How to prevent Spock from treating null as string ("null") with ObjectMapper in unit test cases?

我有以下 Spock 单元测试示例:

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

.
.
.

where:
name  | location
'Tom' | null

它将测试用例中的 null 视为字符串 "null",因此它通过了 if-checks,例如 if(location != null)...

如何使其不是字符串(空字符串 ' ' 被视为“''”)?

很可能 location 被解析为 NullNodeNullNodetoString() 值确实是字符串 "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
}