Powermock - попытка смоделировать метод на самом деле вызывает метод - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть простой класс со статическим методом, который обычно выбрасывает нулевой указатель:

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 ]

0 голосов
/ 19 сентября 2018

Проблема была в том, что мне нужно было использовать PowerMockito.mockStatic, а не PowerMockito.mock.

0 голосов
/ 18 сентября 2018
public void test() {
        MyClass mockedClass = PowerMockito.mock(MyClass.class);
        when(mockedClass.myMethod()).thenReturn(3);
        System.out.println(MyClass.myMethod());
    }
...