当前位置: 首页 > 知识库问答 >
问题:

使用Mockito模拟私有静态最终字符串

钱瑞
2023-03-14
public class Fruit {
private static final String FRUIT = "apple";

public void getFruit() {
    System.out.println("I like " + FRUIT);
}
public class FruitTest {
@Test
public void testFruit() throws NoSuchFieldException, SecurityException, Exception {
    setFinalStatic(Fruit.class.getDeclaredField("FRUIT"), "mango");
    Fruit fruit = new Fruit();
    fruit.getFruit();
}

static void setFinalStatic(Field field, Object newValue) throws Exception {
    field.setAccessible(true);
    Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
    field.set(null, newValue);
}

}

当我做system.out.println(“I like”+fruits)时,我就期待了;它将打印芒果,但它仍然在打印苹果。如果有人能帮助我只使用MOCKITO而不是PowerMock等。

共有1个答案

乐城
2023-03-14

编译时常数可以由javac内联以进行优化。如果更改Fruit类,如下所示:

公共静态类Fruit{公共静态final字符串Fruit=getFruit();

    public static String getFruit() {
        return "apple";
    }



}

它将使用setFinalStatic(fruit.class.getField(“fruit”),“mango”)显示结果mango;system.out.println(fruit.fruit);

 类似资料:
  • 问题内容: 我在类中使用 私有静态最终LOGGER 字段,并且我希望 LOGGER.isInfoEnabled() 方法返回 false 。我如何通过使用Mockito或jMockit模拟静态的final字段 我的课是: 其junit为: 当我运行它的结果是: 我是jmockit的新手,我希望上述junit案例能够成功运行。而且我必须使用JMockit或Mockito,不能使用Powermocki

  • 我在我的类中使用私有静态final LOGGER字段,我希望LOGGER.isInfoEnabled()方法返回false。如何使用mockito或jMockit模拟静态final字段 我的课是: 当我运行它时,结果是: 我是jmockit新手,我希望上面的junit案例能够成功运行。我只能用JMockit或mockito,不能用powermockito。请帮帮忙。

  • 有没有可能的方法来模拟一个私人的最终场? 提前谢谢你们。

  • 问题内容: 我刚刚开始模拟应用程序的不同层。我到了一个地步,我的一个模拟对象在调用最终类静态方法时返回NPE。有没有解决的办法? 例如 问题答案: 您必须同时使用PowerMock和Mockito。 我不明白您的代码段正在尝试做什么,但是以下代码段允许类的静态方法返回模拟的对象。也许这会为您指明正确的方向 在课堂上: 在您的测试方法中:

  • 我正在将Powermock从我目前正在进行的项目中移除,因此我试图仅用Mockito(Mockito-Core-2.2.28)重写一些现有的unitary测试。 无法模拟/Spy类Com.ExternalPackagePath.ExternalClass Mockito无法模仿/监视,因为: 最终类 正如Mockito文档(https://github.com/Mockito/Mockito/wi

  • 有没有办法测试以下类,模拟私有方法getMessage()? 我尝试过jUnit Mockito PowerMock,但我找不到一种方法(无需修改源代码或进行反射更改)。 有什么想法吗?