我已经用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.UnfinishedStubbing异常:此处检测到未完成的插穗:-
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无关呢?
如果doNothing()。doAnswer()
。这让你可以模拟那些应该做一些事情的无效方法,比如设置值等等。如果doNothing()
不起作用,使用一个空白的doAnswer()
应该可以。
例子:
PowerMockito.doAnswer(new org.mockito.stubbing.Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return null; //does nothing
}
}).when(mockObject).methodYouWantToDoNothing(args);
为什么要经历这么多麻烦,以至于你的方法什么都不起作用呢。只需调用PowerMockito。mockStatic(Resource.class)应该用默认存根替换类中的所有静态方法,这基本上意味着它们什么都不做。
除非您确实想更改方法的行为以实际执行某些操作,否则只需调用PowerMockito.mockStatic(Resource.class)就足够了。当然,这也意味着类中的所有静态方法都被存根了,您需要考虑这些方法。
你可以在下面找到一个功能齐全的例子。由于您没有发布完整的示例,我只能假设您没有使用@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或库中提供了这种实
我试图模仿下面的行,但它在执行时给出了一个错误,它说: 此处检测到错误的参数匹配器: 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.excep
问题内容: 为什么直接将我作为参数传递,或者传递给我分配了 值的键 (显然)会有所不同? 换句话说,为什么(commented-out)第二个调用没有分派给? 更新: 我使用Java 1.6。我可以毫无问题地编译Hemal的代码,但是我的仍然无法编译。我看到的唯一区别是Hemal的方法是静态的,而我的不是。但是我真的不明白为什么这应该有所作为…? 更新2: 解决。我在类中有另一个方法foo(Run
问题内容: 我编写了一个简单的类来测试响应读取实体方法(如果它按我的预期工作)。但是效果不佳。 当我启动课程时,出现以下错误: supported on an outbound message. at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.java:1