【问题标题】:How to mock static method calls from multiple classes in a single try block using Mockito?如何使用 Mockito 在单个 try 块中模拟来自多个类的静态方法调用?
【发布时间】:2021-06-24 19:39:06
【问题描述】:

我想模拟来自两个不同类的静态方法。现在,我的代码是这样的:

try(MockedStatic<ObjectFactory> objectFactory = mockStatic(ObjectFactory.class)){
    objectFactory.when(() -> ObjectFactory.getObject(Provider.class)).thenReturn(new Provider());
    .....
}

我想模拟来自Context.class 的另一个静态方法调用。有没有办法在同一个 try 块中定义一个 MockedStatic 上下文对象,而不使用嵌套的 try 块。

不使用 try 块我认为我们可以使用这样的东西

MockedStatic<ObjectFactory> objectFactory = mockStatic(ObjectFactory.class);
MockedStatic<Context> contextMock = mockStatic(Context.class);
......
objectFactory.close();
contextMock.close();

但如果测试抛出异常,mock 将不会关闭,其他使用 mock 的测试也会抛出异常。

【问题讨论】:

    标签: java unit-testing junit mockito


    【解决方案1】:

    try-with-resources 语句可以定义多个AutoCloseable 实例,最后都会关闭:

    try (MockedStatic<ObjectFactory> objectFactory = mockStatic(ObjectFactory.class);
         MockedStatic<Context> contextMock = mockStatic(Context.class)) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2014-02-02
      相关资源
      最近更新 更多