2017-10-14 34 views
1

我不确定为什么以下不起作用。即使输出相同,断言在常规中失败

我简单地将一个响应与一系列值进行比较。响应来自一个JSON其中前端成本的样子:

json.groups.options.cost.flatten() 

20, 25, 40, 50 

但是当你抓住它,它是作为[[20.0000, 25.0000, 40.0000, 50.0000]]

所以我夷为平地,像这样的反应显示

此输出:

[20.0000, 25.0000, 40.0000, 50.0000] 

现在我想比较一些公顷以上rdcoded值。所以我创造了这个变量:

def cost = [20, 25, 40, 50].collect { "${it}.0000" } 

而这种输出:

[20.0000, 25.0000, 40.0000, 50.0000] 

所以,当我断言它们两者一起,我希望他们的工作,但他们没有。

assert cost == json.groups.options.cost.flatten() 

现在,有趣的是,如果我执行相同的断言,但成本设置如下:

def cost = [20.0000, 25.0000, 40.0000, 50.0000] 

断言通过。它怎么才能用于这个,我怎样才能使用.collect方法以原始方式工作?

回答

0

它并没有声明,因为您试图将List<GString>List<BigDecimal>进行比较。一般来说,你不应该有这样的比较列表担心小数点,因为:

assert [20, 25, 40, 50] == [20.0000, 25.0000, 40.0000, 50.0000] 

其中第一清单List<Integer>,第二个是List<BigDecimal>

您可以检查什么类型的列表是json.groups.options.cost.flatten(),如果这是不是List<BigDecimal>您可以通过

json.groups.options.cost.flatten().collect { new BigDecimal(it) } 

转换它,然后用[20, 25, 40, 50]

简单地比较