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).
Ответы
Ответ 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 и "прокомментировать" некоторые строки, добавив к ним символ #
.