PowerMock多个匹配构造函数; (变长数组构造函数vs无参数构造函数)

时间:2017-11-10 11:16:48

标签: java unit-testing junit powermock

我正在尝试使用ResourceConfig.class中没有args的Mock构造函数。 碰巧ResourceConfig有两个构造函数:(以及其他构造函数):

<active>false</active>

PowerMock(1.7.3)无法获得正确的构造函数。 我认为这是一个错误;但也许有一个solutoin(?)

代码:

public ResourceConfig()
public ResourceConfig(Class... class)

这会产生:

  

org.powermock.reflect.exceptions.TooManyConstructorsFoundException:   找到了几个匹配的构造函数,请指定参数   参数类型,以便PowerMock可以确定您使用的方法   提到。在课堂上匹配构造函数   org.glassfish.jersey.server.ResourceConfig是:
  org.glassfish.jersey.server.ResourceConfig()
  org.glassfish.jersey.server.ResourceConfig([Ljava.lang.Class; .class)

     

在   org.powermock.reflect.internal.ConstructorFinder.throwExceptionWhenMultipleConstructorMatchesFound(ConstructorFinder.java:89)...

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以取消多个构造函数,例如:

@Test
public void toStackOvflow2() throws Exception {
    ResourceConfig resConf = mock(ResourceConfig.class);

    // suppress TooManyConstructorsFoundException
    MemberModifier.suppress(MemberMatcher.constructorsDeclaredIn(ResourceConfig.class));
    whenNew(ResourceConfig.class).withNoArguments().thenReturn(resConf);

    // verifying that the expected ResourceConfig instance is returned when using the default ctor ...
    assertSame(resConf, new ResourceConfig());
}

此测试通过:

  • PowerMock 1.7.3
  • 泽西岛2.26

答案 1 :(得分:0)

可接收FileString的{​​{1}}类的示例:

Uri

最佳方法(如果您在这种情况下知道String值):

whenNew(File.class).withParameterTypes(String.class).withArguments(any(String.class)).thenReturn(mockFile);