在Groovy中使用snakeYaml时字符串缺少引号

o2rvlv0m  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(225)

我正在写一个Groovy测试来检查一个方法的yaml输出,我在比较预期的yaml和生成的yaml时遇到了麻烦。预期的yaml字符串缺少双引号,因为需要双引号的值。我正在使用snakeYaml作为我的yaml解析器。
生成的yaml输出:

key_a: 3
key_b: "value_b"
key_c:
  key_c1: "value_c1"
  key_c2: "value_c2"
  key_c3: "value_c3"

预期的yaml输出:

key_a: 3
key_b: value_b
key_c:
  key_c1: value_c1
  key_c2: value_c2
  key_c3: value_c3

在这种情况下,生成的yaml是正确的,但是我的测试失败了,因为预期的yaml不包含所需的引号。
使用yaml.dump创建yaml字符串:

def expected = yaml.dump(yaml.load("""
key_a: 3
key_b: "value_b"
key_c:
  key_c1: "value_c1"
  key_c2: "value_c2"
  key_c3: "value_c3"
"""))

我如何用引号创建预期的yaml字符串??任何关于这方面的建议都会有帮助。谢谢!!

ruoxqz4g

ruoxqz4g1#

您的测试应该载入YAML并比较值。不论引号为何,都可以这样做。
SnakeYAML确实允许您控制引用样式,但它是not trivial-我对Groovy不够了解,无法评估它是否可以翻译成Groovy。
一般来说,YAML不是一种你可以完全控制表示的格式。因此,你不应该检查特定的表示(实现可能会在更新时改变它表示事物的方式),而是重新加载YAML并检查值。
或者,在您的测试中,在比较之前加载并转储您的 expected YAML,以便它与生成的YAML具有相同的格式。

相关问题