2015-11-16 45 views
0

我有一个参数化的JUnit类具有类似于此设置东西参数化的数据:如何将`@ Parameters`注释中打印数组内容在JUnit

@Parameters(name = "{index}: {0}/{1} : {2}") 
public static Collection<Object[]> data() { 
    return Arrays.asList(new Object[][] { 
      { 
        "Samsung", 
        new Object[] { "size", "10" }, 
        "http://my.test.service.com/svc/brand/samsung?size=10" 
    }, 
      { 
        "Apple", 
        new Object[] { "color", "red" }, 
        "http://my.test.service.com/svc/brand/apple?color=red" 
    }, 
    // Code truncated 

    }); 
} 

运行代码后,我可以看到结果是这样的:

[0: Samsung/[Ljava.lang.Object;@713dff89 : http://my.test.service.com/svc/brand/samsung?size=10] 
[1: Apple/[Ljava.lang.Object;@23ab8f3f : http://my.test.service.com/svc/brand/apple?color=red] 

等...

这是非常合乎逻辑作为第二元件{1}是一个数组。

有什么办法获得数组的内容?

如与像

@Parameters(name = "{index}: {0}/{1[0]}-{1[1]} : {2}") 

的符号来获得

[0: Samsung/size-10 : http://my.test.service.com/svc/brand/samsung?size=10] 
[1: Apple/color-red : http://my.test.service.com/svc/brand/apple?color=red] 

我试图用{1}{0}{1[0]}{1.0}但都不是工作

回答

1

name -argument的Parameters注解被用作MessageFormat.format(pattern, args...)呼叫的第一个参数。

我找不到在MessageFormat的javadoc中格式化数组的提示。我的解决方案是将第四个参数添加到包含所需字符串的参数列表中。

Collection<Object[]> data = ... // build your data 
for (Object[] parameter : data) { 
    parameter[3] = Arrays.toString((Object[]) parameter[1]); 
} 
return data;