IT이야기

PowerMockRunner로 JUnit 테스트를 실행할 수 없음

cyworld 2021. 10. 13. 20:40
반응형

PowerMockRunner로 JUnit 테스트를 실행할 수 없음


PowerMock을 사용하여 개인 메서드를 조롱하려는 Gradle 기반 Java 프로젝트가 있습니다. 문제는 @RunWith(org.powermock.modules.junit4.PowerMockRunner.class)주석을 추가할 때 항상 다음 예외가 발생하므로 PowerMockRunner를 사용할 수 없다는 것 입니다.

오류:

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를 사용하지 않음).

도움을 주셔서 감사합니다.


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'

문제에 대한 자세한 내용을 밝히는 스택 추적의 행을 더 추가해 주시겠습니까?


PowerMock에 대해 버그가 기록되었습니다. https://code.google.com/p/powermock/issues/detail?id=531

JUnit은 PowerMock이 리플렉션을 통해 액세스하는 일부 내부 필드 이름을 변경하여 PowerMock이 자체적으로 적절하게 주입하는 기능을 중단한 것으로 보입니다.


Stefan이 말한 것을 확인하고 그 위에 추가해야 합니다.

@PrepareForTest({<The class/es you are Mocking>, ...})

테스트 준비가 없으면 PowerMockRunner는 어떤 클래스가 조롱되는지 알 수 없습니다.

ReferenceURL : https://stackoverflow.com/questions/26192929/unable-to-run-junit-test-with-powermockrunner

반응형