我正在尝试使用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)...
有什么想法吗?
答案 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());
}
此测试通过:
答案 1 :(得分:0)
可接收File
或String
的{{1}}类的示例:
Uri
最佳方法(如果您在这种情况下知道String值):
whenNew(File.class).withParameterTypes(String.class).withArguments(any(String.class)).thenReturn(mockFile);