2014-09-26 50 views
1

为了进行单元测试,我经常需要模拟一些数据响应。我希望能够收集到真实的答案并将其放入模拟中。但是Groovy打印出集合而不包含字符串值。有没有办法以可制作的格式打印Groovy集合?

def foo = ["foo":"bar"] 
println foo 
def bar = ["foo","bar"] 
println bar 

回报

[foo:bar] 
[foo, bar] 

所以当我有一个庞大而复杂的JSON结构的工作与我需要花很长的时间在繁琐和容易出错的编辑。我可能会写一个递归函数来为我打印这个,但我很好奇,如果有一个微不足道的方法来做到这一点。

回答

2

琐碎数据类型有inspect

def m = [a:'a', b:42, c:[1,2,3]] 
def d = m.inspect() 
assert d=='''['a':'a', 'b':42, 'c':[1, 2, 3]]''' 
m2 = Eval.me(d) 
assert m==m2 
+0

啊,非常棒!我知道有一种懒惰的方式。 – jeremyjjbrown 2014-09-29 17:43:11

2

不幸的是,有没有简单的方法,但是你可以自己实现它。的一个特别的方案:

class L extends LinkedList { 
    String toString() { 
     '[' + collect { "'$it'" }.join(',') + ']' 
    } 
} 

def l = new L() 
l << 1 
l << 2 
assert l.toString() == "['1','2']" 

当涉及到JSON JsonOutput类生成pastable输出:

import groovy.json.JsonOutput 

JsonOutput.prettyPrint(JsonOutput.toJson([a:1])) 

new groovy.json.JsonSlurper().parseText('''{ 
    "a": 1 
}''') 
+2

' '[' + list.collect {“'$ it'”} .join(',')+']''更容易没有? – 2014-09-26 21:08:13

+0

当然好多了!你会编辑? – Opal 2014-09-26 21:11:39

+0

groovy.json.JsonOutput是有意义的。我可以在测试类中重新将json重新转换为Groovy Map。 – jeremyjjbrown 2014-09-26 21:33:02

相关问题