簡體   English   中英

Powermockito java.lang.VerifyError

[英]Powermockito java.lang.VerifyError

我正在使用 powermock.mockstatic 這條線,這樣我就可以控制它的返回值,因為它是唯一的擺動,我不必測試它。

@Before
public void setUp() throws Exception
RelatedIntelligencePanel  rel = Mockito.mock(RelatedIntelligencePanel.class);
PowerMockito.mockStatic(RelatedIntelligencePanel.class);
PowerMockito.whenNew(RelatedIntelligencePanel.class).withNoArguments().thenReturn(rel);
...
.. some other unrelated code
}
...........
........ some other code and Tests
......
@Test
public class SomeClass{
RelatedIntelligencePanel relIntPanel = new RelatedIntelligencePanel();

但它會拋出 java.lang.VerifyError。 我做了很多嘲笑這種事情,沒有例外。 刪除 @PrepareForTest 和 @Runwith 會有所幫助,但是當我這樣做時,我失去了 powermock。 我的詳細錯誤也在下面;

java.lang.VerifyError: Bad return type
Exception Details:
Location:
javax/swing/plaf/metal/MetalLookAndFeel.getLayoutStyle()Ljavax/swing/LayoutStyle @3: areturn
Reason:
Type 'javax/swing/plaf/metal/MetalLookAndFeel$MetalLayoutStyle' (current frame, stack[0]) is not assignable to 'javax/swing/LayoutStyle' (from method signature)
Current Frame:
bci: @3
flags: { }
locals: { 'javax/swing/plaf/metal/MetalLookAndFeel'}
stack {'javax/swing/plaf/metal/MetalLookAndFeel$MetalLayoutStyle'}
Bytecode:
0x0000000: b807 49b0

好的,我找到了答案。 同時使用@PowerMockIgnore("javax.swing.*")

PowerMockito.mockStatic(ClassWithStatics.class);
when(ClassWithStatics.getString()).thenReturn("Hello!");

確實解決了我的問題。 如果沒有@PowerMockIgnore("javax.swing.*")PowerMockito.when將無法工作,而 reverse 也是如此。 @stuXnet 和 @staszko032 都是正確的,但這些建議並不能單獨奏效。 注意: WhenNew 也可以工作,但在這種情況下不行。

Powermock、 @PrepareForTest和靜態方法似乎存在問題

使用@PowerMockIgnore("javax.swing.*")注釋您的測試類,如GitHub 上所評論的,有幫助嗎?

這不是您應該使用 PowerMockito 模擬靜態的方式。

請參閱此代碼段( PowerMockito 模擬單個靜態方法並返回對象

PowerMockito.mockStatic(ClassWithStatics.class);
when(ClassWithStatics.getString()).thenReturn("Hello!");

當你想模擬靜態方法時,你不應該使用 whenNew 構造,它可能會導致你的錯誤。

我有一個稍微不同的問題。 我看到錯誤抱怨 javax.net.* 中的一個類,所以我將 javax.net.* 添加到 @PowerMockIgnore(...),它為我解決了這個問題。 似乎您可以簡單地忽略問題包,這將解決您的問題。

暫無
暫無

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

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