繁体   English   中英

模拟静态方法

[英]Mocking static method

我想模拟在其他静态方法中调用的静态方法。

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");

还有许多其他...任何人都有解决该问题的想法?

我认为您应该监视您的类而不是模拟它。

在这种情况下,所有静态方法都将使用实际实现来调用,最重要的是,您可以指示不调用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");
    }
}

如果您需要进一步阅读,我已经写了一篇关于模拟静态方法的文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM