java - 模拟静态方法

标签 java unit-testing mocking mockito powermock

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

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

还有很多... 有人知道如何解决这个问题吗?

最佳答案

在我看来你应该监视你的类而不是 mock 它。

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

我在 Mocking Static Methods 上写了一篇文章如果您需要进一步阅读。

关于java - 模拟静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44650835/

相关文章:

java - 从字符串中按名称获取变量

java - 为什么我不能将浮点二维数组从函数返回到主类?

javascript - 如何在使用 Selenium 框架和 Mocha 的常规测试的同时在浏览器上下文中运行测试?

swift - 在 Swift 中模拟单例/共享实例

node.js - 如何使用 sinon/mocha 模拟 npm 模块

Java JNI EXCEPTION_ACCESS_VIOLATION

java - 需要 128 MB 内存才能启用直接打印

java - 如何模拟私有(private)静态方法的解析异常?

unit-testing - RhinoMocks - stub 返回参数的方法

testing - 如何在 Haskell 中模拟测试?