当前位置: 首页 > 面试题库 >

Powermockito doNothing用于带参数的方法

司空学智
2023-03-14
问题内容

我已经用Java开发了一个应用程序,并试图使用Powermockito创建单元测试(我应该补充说我是单元测试的新手)。

我有一个名为Resource的类,该类具有一个称为readResources的静态方法:

public static void readResources(ResourcesElement resourcesElement);

ResourcesElement也由我编码。在测试中,我想创建自己的资源,因此我希望上述方法什么都不做。我尝试使用此代码:

    PowerMockito.spy(Resource.class);
    PowerMockito.doNothing().when(Resource.class, "readResources", Matchers.any(ResourcesElement.class));

单元测试引发异常

org.mockito.exceptions.misusing.UnfinishedStubbingException:在此处检测到未完成的存根:->
org.powermock.api.mockito.internal.PowerMockitoCore.doAnswer(PowerMockitoCore.java:36)

Powermockito还建议我应该在when之后使用thenReturn或thenThrow,但是似乎在doNothing之后调用’when’方法时返回void(这是逻辑上的)。如果我尝试:

PowerMockito.when(Resource.class, "readResources", Matchers.any(ResourcesElement.class)).....

什么时候之后都不要选择什么都不做。

我设法使用方法的2个参数版本使无参数的方法不执行任何操作。例如:

PowerMockito.doNothing().when(Moduler.class, "startProcessing");

这有效(startProcessing不接受任何参数)。

但是,如何使使用参数的方法对Powermockito无效呢?


问题答案:

您可以在下面找到功能完整的示例。由于您没有发布完整的示例,因此我只能假设您没有使用@RunWith或注释测试类,@PrepareForTest因为其余的看起来不错。

@RunWith(PowerMockRunner.class)
@PrepareForTest({Resource.class})
public class MockingTest{

    @Test
    public void shouldMockVoidStaticMethod() throws Exception {
        PowerMockito.spy(Resource.class);
        PowerMockito.doNothing().when(Resource.class, "readResources", Mockito.any(String.class));

        //no exception heeeeere!
        Resource.readResources("whatever");

        PowerMockito.verifyStatic();
        Resource.readResources("whatever");
    }

}

class Resource {
    public static void readResources(String someArgument) {
        throw new UnsupportedOperationException("meh!");
    }
}


 类似资料:
  • 问题内容: 在Java 8中,具有以下类 可以通过方法引用来调用setBornTrue方法: 但是我将如何使用forEach方法并通过 方法引用 使用setBorn ?试: 导致错误“无法解析方法setBorn”。 另外,我该如何传递True的值? 问题答案: 使用lambda: 没有发现仅使用Java 8 API的其他方法。 使用此自定义功能: 你可以做: 如果Java API或库中提供了这种实

  • 是否有可能将方法引用与参数一起使用?我喜欢流的想法,我只是想让代码更易读。 实际上,我认为有一个类似的问题,方法引用了一个参数,我读了,但不知道如何在我的代码中使用bind2方法。这是唯一的解决办法吗?

  • 我试图模仿下面的行,但它在执行时给出了一个错误,它说: 此处检测到错误的参数匹配器: when(mock.get(anyInt())).thenreturn(null); doThrow(new RuntimeException()).When(mock).SomeVoidMethod(anyObject()); verify(mock).somemethod(contains(“foo”)) 这

  • 我正在通过XML配置和实例工厂方法实例化一些bean: 我实例化我的原型bean编程由BeanFactory.getBean(bean,参数...): 在Spring3中,我想切换到基于java的带注释bean配置。这是我的FactoryBean: 我的问题:如何在这里传递参数?上面的代码将org.springframework.beans.factory.NoSuchBean定义异常:没有类型[

  • 我已经用Java开发了一个应用程序,我正在尝试使用Powermockito创建单元测试(我应该补充一点,我是单元测试新手)。 我有一个名为Resource的类,它有一个名为readResources的静态方法: ResourcesElement也由我编写。在测试中,我想创建自己的资源,所以我希望上面的方法什么都不做。我试着使用以下代码: 单元测试引发异常: org.mockito.exceptio

  • 问题内容: 我正在使用gwt uibinder。我想为字段动态设置值。我正在尝试这样的事情 并且该字段设置有这样的值 而且ValueStore有2种方法 问题是我无法调用getValue(key)。我只能调用no-args方法,这意味着以下操作是不可能的 请说明是否有一种方法可以实现,其中我可以调用传递了参数的方法。 问题答案: 不支持该方法,只能调用没有参数的方法。您将不得不直接将其公开为no