我正在尝试测试一些严重依赖静态方法调用的遗留代码。
基本上,我有一个类A,方法b()和c()。 A.b()返回void,A.c()返回一个值。
如果调用了真正的A.b(),则被测试的类会抛出异常,因此我无需执行任何操作。但是,如果我使用:
PowerMockito.spy(A.class);
PowerMockito.doNothing().when(A.class);
然后我不能模拟A.c()来返回我需要的值。这是因为行
PowerMockito.when(A.c()).thenReturn(value);
抛出异常:Only void methods can doNothing()
。
有没有办法让A.b()无所事事并“覆盖”A.c()以返回正确的值?
答案 0 :(得分:1)
我找到了解决问题的解决办法:
要模拟A.c(),请使用:
PowerMockito.mockStatic(A.class);
PowerMockito.when(A.c()).thenReturn(value);
然后,要在A.b()
上不执行任何操作,请添加以下行:
PowerMockito.suppress(PowerMockito.method(A.class, "b"));
我觉得很脏。
答案 1 :(得分:0)
我认为您在when()
之后错过了方法调用。
从PowerMockito API开始尝试PowerMockito.doNothing().when(A.class); A.b();