java - 在 Java/Mockito 的最终类中模拟静态方法

标签 java mocking mockito powermock

<分区>

如果我有课

public final class Application {
    public static String getName() { return "Bad App"; }
}

那么我怎样才能改变行为并使 getName 返回,比方说,"Good App"? 我需要模拟它,以便被测类获得预期值。 实际上,静态方法进行了一些我想避免的网络调用。

我无法重写应用程序的代码。

我正在使用 Java 6、Maven、JUnit 和 Mockito。

这可能吗?

最佳答案

您可以使用 powermockito 来完成,如下所示:

假设这是你的静态方法类:

public final class MyStaticClass {
    public static String helloWorld() {
        return "Hello World";
    }
}

并且您想模拟 helloWorld 方法,并让它在测试时返回“Hi World”。您可以执行以下操作:

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyStaticClass.class})
public class PowerMockItoTest {
    @Test
    public void mockStaticClassTest() {
        PowerMockito.mockStatic(MyStaticClass.class);
        final String mockedResult = "Hi World";
        Mockito.when(MyStaticClass.helloWorld()).thenReturn(mockedResult);
        Assert.assertEquals(AStaticClass.helloWorld(), mockedResult);
    }
}

如果你想使用PowerMock,你可以这样做:

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyStaticClass.class})
public class PowerMockTest {
    @Test
    public void testRegisterService() throws Exception {   
        PowerMock.mockStatic(MyStaticClass.class);
        final String mockedResult = "Hi World";
        expect(MyStaticClass.helloWorld()).andReturn(mockedResult);
        replay(MyStaticClass.class);
        Assert.assertEquals(AStaticClass.helloWorld(), mockedResult);
        verify(MyStaticClass.class);
    }
}

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

相关文章:

c# - 如何模拟返回列表对象的属性 - 在犀牛模拟中

java - 如何根据接收到的参数进行mocking?

java - 如何在 Junit 中模拟属性文件

java - 如何在父类中模拟@injected对象

Java 并发实践 list 3.1

java - 为什么使用 ActionListener 会破坏我的 Swing Applet?

java - 如何在 Jooq 中初始化和创建 ResultSet 和 Record?

Java:从Runnable返回结果

Java JFilechooser 定制

reactjs - 如何模拟从另一个文件导入的 jest 函数作为默认值