静态方法returns空值

Static method returns empty value

我正在尝试为静态方法添加测试 class :

class SomeClass {

    public static int getLoginPage() {
    if (otherStaticMethod()) {
      return Screen.FOO;
    }
    return Screen.BAR;
  }
}

请注意,FOO 和 BAR 的值相差为零。

我的测试class :

@RunWith(PowerMockRunner.class)
@PrepareForTest({SomeClass.class})
public class SomeClass_getLoginPage {

  @Test
  public void testgetLoginPage() {    
    PowerMockito.mockStatic(SomeClass.class);    

    Mockito.when(SomeClass.otherStaticMethod()).thenReturn(true);

    assertTrue(SomeClass.getLoginPage() == Screen.FOO);


    Mockito.when(SomeClass.otherStaticMethod()).thenReturn(false);

    assertTrue(SomeClass.getLoginPage() == Screen.BAR);
  }
}

但是调用方法otherStaticMethod时,方法getLoginPagereturns0,这里应该returnFOO或者BAR。我该如何解决?

只需使用重载的 spy 方法而不是实际模拟整个 class.

PowerMockito.spy(SomeClass.class);

现在默认情况下,所有静态方法都将 运行 真正实现,直到您真正模拟其中之一。

你得到 0 的原因是因为 mockStatic 你模拟了所有静态方法,默认情况下调用 int 返回方法,将导致该值(如果未明确指定)。