【问题标题】:Varargs error when using Parameterized class in JUnit在 JUnit 中使用参数化类时出现 Varargs 错误
【发布时间】:2019-10-11 13:52:16
【问题描述】:

我正在使用Parameterized 类创建一个测试用例以提高可伸缩性。我有类似以下的内容...

@RunWith(Parameterized.class)
public class Test
{
    private final translator;

    @Parameterized.Parameters(name = "translate {0}")
    public static Collection parameters()
    {
        return Arrays.asList(new Object[][] {
                { Translate.EN },
                { Translate.FR }
        });
    }

    public Test1(Translate translate)
    {
        this.translator = new TranslatorImpl(translate);
    ...
    ...

我有一个 Linter,它为以下部分引发错误...

return Arrays.asList(new Object[][] {
        { Translate.EN },
        { Translate.FR }
});

上面写着……

创建一个数组只是为了将它作为可变参数 (...) 参数传递是没有意义的;可变参数是一个数组。只需直接传递元素。它们将自动合并到一个数组中。顺便传递一个预期 Object ... 的数组会使意图模棱两可:该数组应该是一个对象还是一组对象?

我可能需要添加更多参数,因此使用 Parameterized 类很有帮助,我想使用它,但我不确定如何解决我遇到的问题,以及它是否值得解决。任何想法都会有所帮助。

【问题讨论】:

  • 改成Arrays.asList(new Object[] { Translate.EN }, new Object[] { Translate.FR })之后就没有了吗?
  • @AdamSiemion 不,问题仍然存在。同样的错误,但它是由第二个对象定义引起的。
  • a 当你创建方法 Object[] m(Object a) { return new Object[] { a }; } 并将其更改为 Arrays.asList(m(Translate.EN), m(Translate.FR))?

标签: java junit parameterized


【解决方案1】:

Arrays.asList 的签名是public static <T> List<T> asList(T... a) 因此,您可以将单独的数组元素提供给它,而不是将数组提供给Arrays.asList。在这种特殊情况下:

return Arrays.asList(
  new Translate[] { Translate.EN },
  new Translate[] { Translate.FR }
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    相关资源
    最近更新 更多