如何模拟静态方法设置的最终静态变量?

时间:2017-04-13 00:27:21

标签: java unit-testing junit mockito powermockito

我已经查看了与此类似的其他问题,但他们没有这个确切的用例。

如果我有以下代码:

private static final String SOME_CONSANT = SomeStaticClass.getString();

我如何去模拟它,以便它不总是返回空指针异常?我已经尝试过使用Whitebox.setInternalState,但只有当静态方法没有设置值时,它才会起作用。我也尝试过如here概述的反思,但没有成功。

我认为这是因为静态方法没有被模拟,所以返回值总是为null,但使用以下内容似乎也不起作用。

PowerMockito.mockStatic(SomeStaticClass.class);
when(SomeStaticClass.getString(Mockito.anyString())).thenReturn("test");
Whitebox.setInternalState(ClassUnderTest.class, "SOME_CONSANT", "value");

我很茫然。感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为你的主要问题是你试图模仿不同的方法。

使用此代码when(SomeStaticClass.getString(Mockito.anyString())).thenReturn("test");,您可以模拟方法SomeStaticClass.getString(String parameter),但是,在您的原始代码中,您拥有SomeStaticClass.getString()