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

JsonNodeasBoolean() メソッドを定義しているように見えるので、Groovy はこれを呼び出して、一般的な!= nullテストを使用するのではなく、オブジェクトの Groovy-true 値を決定します。このメソッドは 1.9 で新しくなったと主張しているため、1.6.5 では動作が異なっていたはずです。

于 2013-07-12T16:26:30.627 に答える