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

Не удалось запустить 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).

Приветствия и благодарности за любую помощь! Бен

4b9b3361

Ответ 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 не будет знать, какой класс издевается.