2014-10-04 214 views
45

我有一個基於Gradle的Java項目,現在我想模擬使用PowerMock的私有方法。問題是我無法使用PowerMockRunner,因爲我在添加@RunWith(org.powermock.modules.junit4.PowerMockRunner.class)註釋時總是遇到以下異常。無法使用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解決了這個問題。請相應更新您的依賴項

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中添加更多行,以便發現有關該問題的更多詳細信息。

+0

非常感謝! Gradle是否也會推出beta版本,這是否是正常行爲? – Ben 2014-10-07 20:39:41

+2

似乎並沒有在4.12中修復... – Mag 2015-03-06 12:40:23

+2

幸運的是PowerMock 1.6.1修復了這個問題。 – JeeBee 2015-03-06 17:00:02

0

檢查什麼斯特凡說,以上的,你還需要添加

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

不爲測試做準備,PowerMockRunner不會知道是哪個類嘲笑。