1

为什么这个测试用例会抛出异常“节点不真实”,即使它的大小是 1?

package foo.bar

import grails.test.*

import org.codehaus.jackson.JsonFactory
import org.codehaus.jackson.JsonNode
import org.codehaus.jackson.map.ObjectMapper
import org.junit.Test

class MyTest{
    @Test
    void testJSonNode() {
        ObjectMapper mapper = new ObjectMapper(new JsonFactory())
        JsonNode node = mapper.readTree('{"foo":"bar"}')

        assert node.size() == 1
        assert node.iterator().hasNext() == true

        if (!node) {
            throw new Exception("Node is not truthful")
        }
    }
}

一些背景资料:

  1. 如果我if (!node)改为if (node == null)
  2. 我猜这是Groovy Truth的问题
  3. node 是org.codehaus.jackson.node.ObjectNode的一个实例
  4. 这曾经在 org.codehaus.jackson:jackson-mapper-asl:1.6.5 中工作
  5. 我在 org.codehaus.jackson:jackson-mapper-asl:1.9.11 中看到了这个问题
  6. ObjectNode 实现 Iterable
4

1 回答 1

3

JsonNode似乎定义了一个asBoolean() 方法,因此 Groovy 将调用它来确定对象的 Groovy-truth 值,而不是使用一般!= null测试。此方法声称是 1.9 中的新方法,这就是行为在 1.6.5 中有所不同的原因。

于 2013-07-12T16:26:30.627 回答