Насмешливый статический метод


Я хочу поиздеваться над статическим методом, который вызывается внутри другого статического метода.

public class MyClass
{
    public static void methodA(String s)
    {
        ...
        methodB(s);
        ...
    }
    public static void methodB(String s)
    {
        ...
    }
}

Итак, я хочу издеваться над methodA, но я хочу пропустить вызов methodB. Я перепробовал почти все решения, которые мне удалось найти, но безуспешно. Каждый раз, когда methodB вызывается.

Некоторые решения, которые я использовал:

PowerMockito.suppress(method(MyClass.class, "methodB"));
MyClass.methodA("s");

_

PowerMockito.stub(method(MyClass.class, "methodB"));
MyClass.methodA("s");

_

PowerMockito.mockStatic(MyClass.class);
doNothing().when(MyClass.class, "methodB", anyString());
MyClass.methodA("s");

И многие другие... У кого-нибудь есть идея, как решить эту проблему?

1 3

1 ответ:

По моему мнению, вам следует шпионить за своим классом, а не насмехаться над ним.

В этой ситуации все статические методы будут вызываться с реальной реализацией, и вдобавок вы можете дать команду не вызывать methodB:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
class MyClassTest
{
    @Test
    public void test()
    {
       PowerMockito.spy(MyClass.class);
       doNothing().when(MyClass.class, "methodB", anyString());
       MyClass.methodA("s");
    }
}