如何防止 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
被解析为 NullNode
。 NullNode
的 toString()
值确实是字符串 "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
}
我有以下 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
被解析为 NullNode
。 NullNode
的 toString()
值确实是字符串 "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
}