代码之家  ›  专栏  ›  技术社区  ›  user1985273

Powermock-试图模拟方法实际上调用方法

  •  -1
  • user1985273  · 技术社区  · 6 年前

    我有一个带有静态方法的简单类,它通常抛出一个空指针:

    public class MyClass {
        private static String s;
    
        public static final int myMethod(){
            return s.length();
        }
    }
    

    我试图用PowerMock模拟这个静态方法,如下所示:

    import static org.mockito.Mockito.when;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.powermock.api.mockito.PowerMockito;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    
    @RunWith(PowerMockRunner.class)
    @PrepareForTest({ MyClass.class })
    
    public class MyClassTest {
        @Test
        public void test() {
            PowerMockito.mock(MyClass.class);
            when(MyClass.myMethod()).thenReturn(3);
            System.out.println(MyClass.myMethod());
        }
    }
    

    但结果是:

    java.lang.NullPointerException
        at MyClass.myMethod(MyClass.java:6)
        at MyClassTest.test(MyClassTest.java:20)
    

    所以当我试图模拟它时,似乎调用了实际的方法。为什么会这样?

    2 回复  |  直到 6 年前
        1
  •  1
  •   user1985273    6 年前

    问题是我需要使用PowerMockito.mockStatic而不是PowerMockito.mock。

        2
  •  0
  •   Lai    6 年前
    public void test() {
            MyClass mockedClass = PowerMockito.mock(MyClass.class);
            when(mockedClass.myMethod()).thenReturn(3);
            System.out.println(MyClass.myMethod());
        }