Ошибка Varargs при использовании класса Parameterized в JUnit - PullRequest
2 голосов
/ 11 октября 2019

Я создаю контрольный пример с использованием класса 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 }
});

Он говорит ...

Нет смысла создавать массив исключительно с целью передачи его в качестве аргумента varargs (...);varargs это массив. Просто передайте элементы напрямую. Они будут объединены в массив автоматически. Случайная передача массива, где ожидается объект ..., делает намерение неоднозначным: должен ли массив быть одним объектом или набором объектов?

Возможно, мне придется добавить больше аргументов, и поэтому, используякласс Parameterized полезен, и я хотел бы использовать это, но я не уверен, как решить проблему, с которой я столкнулся, и стоит ли ее решать. Любые идеи будут полезны.

1 Ответ

2 голосов
/ 11 октября 2019

Arrays.asList подпись public static <T> List<T> asList(T... a) Таким образом, вместо подачи массива в Arrays.asList, вы можете передать его отдельным элементам массива. В данном конкретном случае:

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