2014-09-26 49 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

相關問題