Параметризованные тесты Junit совместно с Powermock - как?
-
20-09-2019 - |
Вопрос
Я пытался выяснить, как запускать параметризованные тесты в Junit4 вместе с PowerMock.Проблема в том, что для использования PowerMock вам нужно украсить свой тестовый класс
@RunWith(PowerMockRunner.class)
и чтобы использовать параметризованные тесты, вы должны украсить
@RunWith(Parameterized.class)
Из того, что я вижу, они кажутся взаимоисключающими!?Это правда?Есть ли какой-нибудь способ обойти это?Я попытался создать параметризованный класс внутри класса, работающего с PowerMock;что- то вроде этого:
@RunWith(PowerMockRunner.class)
class MyTestClass {
@RunWith(Parameterized.class)
class ParamTestClass {
// Yadayada
}
}
Но, к сожалению, от этого мало толку...В ParamTestClass
по-прежнему не работает с поддержкой PowerMock (возможно, это неудивительно)...И у меня вроде как закончились идеи, так что я очень ценю любую помощь!
Обновить: Для будущих пользователей Google также см.: Используете PowerMock без RunWith?
Решение
У меня была такая же проблема.К сожалению, это не позволило бы мне использовать правило PowerMock из-за JVM, которая у меня была.Вместо правила я использовал RunnerDelegate.
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(Parameterized.class)
Другие советы
Да, это работает с помощью PowerMock Правило доступно, если вы используете JUnit 4.7+.
Вы не можете использовать два прогона класса одновременно, поэтому вам определенно придется написать свой собственный тестовый прогон, чтобы это произошло.
Я ничего не знаю о Powermock, но после 10 секунд исследований, похоже, что одним из решений было бы написать тестовый модуль, который использует загрузчик классов powermock и запускает параметризованные тесты.Если вы можете выяснить, как делегировать параметризованному тестовому исполнителю из вашего пользовательского тестового запуска, это может быть вашим лучшим выбором.