簡體   English   中英

PowerMock無法正確地存根靜態方法?

[英]PowerMock not stubbing static method properly?

我正在嘗試使用powermock和Robolectric編寫一個非常簡單的測試。 這是我的代碼:

import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.robolectric.RobolectricTestRunner;

import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
@PrepareForTest(BadStaticClass.class)
public class SomeActivityTest {

    @Test
    public void testSomething() {
        PowerMockito.mockStatic(BadStaticClass.class);
        Mockito.when(BadStaticClass.dontWantThisMethod()).thenReturn(false);
        new SomeActivity().usesStatic();
    }
}

基本上,我有一個類“ SomeActivity”,它具有調用BadStaticClass.dontWantThisMethod() 我希望該靜態方法被刪除。

為什么我的代碼不起作用?

我一直在收到類似的錯誤消息: you are trying to stub a final method, you naughty developer!

我以為PowerMock的全部目的就是看不到它。

根據PowerMock API,您必須為某些版本的JUnit等包含@RunWith(PowerMockRunner.class) 。但是,您還需要使用@RunWith(RobolectricTestRunner.class)並且在一個類上不能指定多個@RunWith

那么該怎么辦?

我懷疑您可以將您的代碼保留在上面,並引入一個JUnit @Rule (請參閱: PowerMockRule docs ),並且在類似的文章中也對此進行了描述。 只要確保您檢查了正在使用的Jar的版本,即可使其與該其他SO帖子中所述的版本匹配。 除非獲得兼容版本,否則通常情況下一切都無法正常工作,而且兼容的版本也不總是很明顯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM