我正在使用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会有所帮助,但是当我这样做时,我会失去力量。我的详细错误也在下面;
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
答案 0 :(得分:1)
好的,我找到了答案。同时使用@PowerMockIgnore("javax.swing.*")
和
PowerMockito.mockStatic(ClassWithStatics.class);
when(ClassWithStatics.getString()).thenReturn("Hello!");
确实解决了我的问题。如果没有PowerMockito.when
,@PowerMockIgnore("javax.swing.*")
将无效,反之亦然。 @stuXnet和@staszko032都是正确的,但这些建议不能单独使用。注意:WhenNew也在工作但不是在这种情况下。
答案 1 :(得分:0)
seems to be a problem有Powermock,@PrepareForTest
和静态方法。
使用@PowerMockIgnore("javax.swing.*")
注释您的测试类(注释为on GitHub)是否有帮助?
答案 2 :(得分:0)
这不是你应该用PowerMockito模拟静态的方法。
请参阅此代码段(PowerMockito mock single static method and return object)
PowerMockito.mockStatic(ClassWithStatics.class);
when(ClassWithStatics.getString()).thenReturn("Hello!");
由于你想模拟静态方法,你不应该在新建时使用它,这可能会导致你的错误。
答案 3 :(得分:0)
我有一个稍微不同的问题。我看到有关抱怨javax.net。*中的类的错误,所以我将javax.net。*添加到@PowerMockIgnore(...),它为我解决了这个问题。似乎您可以简单地忽略问题包,这将解决您的问题。