如何使用PowerMockito mock被同类另一静态方法调用的静态方法
问题根因
你调用PowerMockito.mockStatic(ParticipantUtils.class)时,会将该类的所有静态方法都设为Mock状态,默认返回对应类型的默认值(String类型返回null)。你仅配置了isAlpha方法的桩返回值,但getNationalNumberJP方法本身已经被Mock,不会执行真实的内部逻辑,因此不会触发内部的isAlpha调用,最终返回null导致断言失败。
解决方法
有两种可选方案:
方案1:使用静态Spy实现部分Mock
如果你确实需要MockisAlpha方法的返回值,使用spyStatic替代mockStatic,Spy会保留类的真实逻辑,仅对显式配置了桩的方法返回自定义值:
@RunWith(PowerMockRunner.class) @PrepareForTest({ParticipantUtils.class}) public class ParticipantUtilsTest { @Test public void getNationalNumberJP_input_is_alpha(){ PowerMockito.spyStatic(ParticipantUtils.class); String input = "ABCD"; PowerMockito.when(ParticipantUtils.isAlpha("ABCD")).thenReturn(true); assertEquals("ABCD", ParticipantUtils.getNationalNumberJP(input)); } }
方案2:直接测试真实逻辑(更推荐)
该工具类逻辑简单,没有依赖外部资源,不需要Mock内部方法,直接调用真实方法测试即可,无需引入PowerMock:
public class ParticipantUtilsTest { @Test public void getNationalNumberJP_input_is_alpha(){ String input = "ABCD"; assertEquals("ABCD", ParticipantUtils.getNationalNumberJP(input)); } @Test public void getNationalNumberJP_input_not_alpha(){ String input = "1234"; assertEquals("Invalid input", ParticipantUtils.getNationalNumberJP(input)); } }
额外注意
你提供的ParticipantUtils类中isAlpha方法存在语法错误:
- String不能直接用
[]取字符,需要调用charAt()方法 - if判断缺右括号
修正后的代码如下:
public static boolean isAlpha(String inputString) { if (Character.isLetter(inputString.charAt(0))) return true; return false; }
内容的提问来源于stack exchange,提问作者Light Yagami
相关产品推荐
相关产品推荐

