【问题标题】:Mocking a static method in a final class in Java/Mockito [duplicate]在Java / Mockito的最终类中模拟静态方法[重复]
【发布时间】:2014-12-17 10:11:41
【问题描述】:

如果我有课

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

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

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

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

有可能吗?

【问题讨论】:

  • 您是否必须使用静态调用,而不是拥有可以模拟的正常依赖项?
  • 您将需要 powermockito 或 powermock。
  • @JonSkeet 我不能改变Application 也不能改变它的使用方式,或者至少在不久的将来不会。如果可以的话,我绝对会的。
  • @almasshaikh 有什么可以分享的吗?
  • 你更喜欢power mock还是power mockito?我认为 powermockito?

标签: java mocking mockito powermock


【解决方案1】:

您可以使用 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);
    }
}

【讨论】:

  • 啊,你看。 MyStaticClass 必须是 final
  • 这两种方法都可以。
  • 无法使用 powerMock 和 EasyMock 模拟 Inet4Address.getLocalHost()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2019-04-14
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2014-06-01
相关资源
最近更新 更多