Не удалось запустить JUnit-тест с помощью PowerMockRunner
У меня есть проект Java на основе Gradle, я теперь хочу издеваться над личным методом с помощью PowerMock. Проблема в том, что я не могу использовать PowerMockRunner, поскольку я всегда получаю следующее исключение, когда добавляю аннотацию @RunWith(org.powermock.modules.junit4.PowerMockRunner.class)
.
Ошибка:
org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator.
at org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:581)
at org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308)
at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate TestMethods(PowerMockJUnit4MethodValidator.java:79)
at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate InstanceMethods(PowerMockJUnit4MethodValidator.java:49)
at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108)
...
Это мои тестовые зависимости:
testCompile 'junit:junit:4.+',
'org.powermock:powermock-core:1.5.6',
'org.powermock:powermock-module-junit4:1.5.6',
'org.powermock:powermock-api-mockito:1.5.6'
Сам тест терпит неудачу также, когда он полностью пуст (ошибка инициализации):
@RunWith(PowerMockRunner.class)
public class SomeTest {
@Test
public void testSomething() {
}
}
Любые идеи, что может быть неправильным? Другие тесты с использованием PowerMock работают нормально (ни один из них не использует PowerMockRunner).
Приветствия и благодарности за любую помощь!
Бен
Ответы
Ответ 1
Это ошибка, возникающая при использовании JUnit 4.12 и PowerMock < 1.6.1. Проблема решена в PowerMock 1.6.1. Пожалуйста, обновите свои зависимости соответственно.
testCompile 'junit:junit:4.12',
'org.powermock:powermock-core:1.6.1',
'org.powermock:powermock-module-junit4:1.6.1',
'org.powermock:powermock-api-mockito:1.6.1'
Если вы не можете обновить PowerMock, вы можете использовать JUnit 4.11.
testCompile 'junit:junit:4.11',
'org.powermock:powermock-core:1.5.6',
'org.powermock:powermock-module-junit4:1.5.6',
'org.powermock:powermock-api-mockito:1.5.6'
Не могли бы вы добавить дополнительные строки stacktrace, которые раскрывают более подробную информацию о проблеме.
Ответ 2
Произошла ошибка с PowerMock: https://code.google.com/p/powermock/issues/detail?id=531
Похоже, что JUnit изменил некоторые свои внутренние имена полей, к которым PowerMock обращался через отражение, тем самым нарушая способность PowerMock правильно вводить себя.
Ответ 3
Посмотрите, что сказал Стефан, и над этим вам также нужно добавить
@PrepareForTest({<The class/es you are Mocking>, ...})
без подготовки к тестированию, PowerMockRunner не будет знать, какой класс издевается.