Подтвердить что ты не робот

JUnit параметризованные тесты: как мне запустить только 1 конкретный тест от IntelliJ/Eclipse?

У меня есть тест @Parameterized junit, который порождает 50 тестов:

@RunWith(Parameterized.class)
public class NurseRosteringSolveAllTurtleTest ... {

    @Parameterized.Parameters(name = "{index}: {0}")
    public static Collection<Object[]> getSolutionFilesAsParameters() {
        return ... // returns 50 Files.
    }

    public NurseRosteringSolveAllTurtleTest(File unsolvedDataFile) {
        ...
    }

    ...

    @Test
    public void solveDataFile() {
        ...
    }

}

Запуск занимает час (и это невозможно сократить, это интеграционные тесты). Тест 28 не работает.

Как я могу запустить только тестовый 28 без запуска других 49 тестов? Без изменения фактического кода, просто настроив -D или что-то подобное в конфигурации запуска IntelliJ (или Eclipse).

4b9b3361

Ответ 1

Теперь Eclipse (начиная с выпуска Mars M4) может запускать не только один тест из тестового класса Parameterized, но и любой вид поддерева.

Это может быть:

  • все методы для одного набора данных, возвращаемые параметром @Parameterized-method
  • все наборы данных для одного тестового метода

И как уже упоминалось, тест также можно указать, введя имя теста в текст метода, поданный в конфигурации запуска. Будет маркер, указывающий, что метод не существует, но тест будет работать в любом случае.

Подробнее см. этот пост в блоге.

Ответ 2

Я просто протестировал это в Eclipse с помощью простого параметризованного теста, который всегда терпит неудачу на тесте №4. Один из них может щелкнуть правой кнопкой мыши неудавшийся тест и выбрать Выполнить. Выполняется только этот тест.

test output

Результат:

just test 4

Разочаровательно, я не вижу, что сделал Eclipse для решения проблемы. В конфигурации запуска ничего не меняется. В частности, если вы выберете вторую конфигурацию для запуска конфигурации, она выполнит все тесты.

Некоторые дополнительные тесты показывают, что Eclipse будет восстанавливать все 10 значений параметров, но использует только 4-е значение. (Это было определено путем вложения оператора печати в метод @Parameters).

Ответ 3

Не уверен, что это поможет, но вы можете попробовать трюк, который я использовал с параметрами Eclipse и JUnit.

В конфигурации запуска JUnit в поле "Метод тестирования" вы можете написать полное имя параметризованного теста, в вашем примере это должно быть что-то вроде этого "solveDataFile [28:/path/to/your/file]". Eclipse будет жаловаться, что метод не существует, но все равно будет успешно обедать.

Ответ 4

Для подмножества тестов ex (27 и 28) Просто добавьте:

`.subList( startInclusive, stopExclusive );`

перед возвратом вашей коллекции параметров.

Непересекающиеся подмножества:

Collection<Object[]> c = Arrays.asList( data ).subList( startInclusive, stopExclusive );
c.add( another subset );
return c;

Ответ 5

Аналогично Miguel ответьте, если вы используете JUnit 5

@ParameterizedTest
@CsvFileSource(resources = arrayOf("/sender.csv"))

вы можете перейти к своему файлу csv и "прокомментировать" некоторые строки, добавив к ним символ #.