尽管输出是相同的,断言在groovy中失败了

时间:2017-10-14 14:16:58

标签: groovy soapui

我不确定为什么以下不起作用。

我只是将响应与一系列值进行比较。响应来自json,前端的成本如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[FBSDKApplicationDelegate sharedInstance] application:application
                             didFinishLaunchingWithOptions:launchOptions];
return YES;
}


- (void)applicationDidBecomeActive:(UIApplication *)application {

    NSLog(@"AppActive");

    //NSLog(@"+++ App active Trigger 1");

    [FBSDKAppEvents activateApp];
}


     FBSDKLog: Failed to send AppEvents: Error Domain=com.facebook.sdk.core Code=8 "(null)" UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0, com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=(#100) Param extinfo[2] must be an integer, com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=100, com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey={
            body =     {
                error =         {
                    code = 100;
                    "fbtrace_id" = BS3nqPCTUeR;
                    message = "(#100) Param extinfo[2] must be an integer";
                    type = OAuthException;
                };
            };
            code = 400;
        }}

但是当你抓住它时,它会显示为20, 25, 40, 50

所以我像这样平坦了回应:

[[20.0000, 25.0000, 40.0000, 50.0000]]

输出:

json.groups.options.cost.flatten()

现在我想将上面的内容与一些硬编码值进行比较。所以我创建了这个变量:

[20.0000, 25.0000, 40.0000, 50.0000]

这输出:

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] 方法以原始方式工作?

1 个答案:

答案 0 :(得分: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]

进行比较