2014-10-04 1 views
45

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

오류 :

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를 사용하지 않는 테스트).

안녕하세요. 어떤 도움을 주셔서 감사합니다. Ben

답변

66

JUnit 4.12 및 PowerMock < 1.6.1을 사용할 때 발생하는 버그입니다. 이 문제는 PowerMock 1.6.1에서 해결되었습니다. 당신이 PowerMock를 업그레이드 할 수없는 경우 그에 따라

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' 

다음의 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의 줄을 추가하십시오.

+0

큰 감사 !!! Gradle이 베타 버전을 가져 오는 것은 정상적인 동작입니까? – Ben

+2

4.12에서 수정되지 않은 것 같습니다 ... – Mag

+2

다행히도 PowerMock 1.6.1에서 수정되었습니다. – JeeBee

0

확인 스테판 말했다, 그리고 그 위에 당신은 또한 시험을 준비하지 않고

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

을 추가, PowerMockRunner 조롱하는 클래스를 알 수 없습니다 필요.

1

PowerMock에 대해 기록 버그가 발생했습니다 : https://code.google.com/p/powermock/issues/detail?id=531 JUnit을 따라서 적절하게 자신을 주입 PowerMock에 대한 능력을 깨고 PowerMock 반사를 통해 접근 한 내부 필드 이름의 일부를 변경할 것으로 보인다

.