静态方法返回空值

时间:2017-05-02 14:29:58

标签: java unit-testing mockito powermockito

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

class SomeClass {

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

请注意,FOO和BAR的值不同为零。

我的测试班:

@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时,方法getLoginPage会返回0,其中应返回FOOBAR。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

只需使用重载的spy方法,而不是实际模拟整个类。

PowerMockito.spy(SomeClass.class);

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

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