Java PowerMockito模拟一个泛型构造函数
我有一个类声明如下:Java PowerMockito模拟一个泛型构造函数,java,generics,junit,mockito,powermock,Java,Generics,Junit,Mockito,Powermock,我有一个类声明如下: public class GenericFoo<T> { private final Class<T> _c; public GenericFoo(Class<T> c) { this._c = c; } /* ... rest is unimportant */ } 为了确保在SomeBar创建GenericFoo的实例时返回testFoo,我尝试了以下
public class GenericFoo<T>
{
private final Class<T> _c;
public GenericFoo(Class<T> c)
{
this._c = c;
}
/*
...
rest is unimportant
*/
}
为了确保在SomeBar
创建GenericFoo
的实例时返回testFoo
,我尝试了以下方法:
PowerMockito.whenNew(com.myCompany.GenericFoo.class)
.withParameterTypes(MyWebServiceResponse.class)
.withArguments(MyWebServiceResponse.class)
.thenReturn(testFoo);
这会导致PowerMock产生错误:
org.powermock.reflect.exceptions.ConstructorNotFoundException: Failed to lookup constructor with parameter types [ com.myCompany.MyWebServiceResponse ] in class com.myCompany.GenericFoo.
...[stack trace snipped]
Caused by: java.lang.NoSuchMethodException: com.myCompany.GenericFoo.(com.myCompany.MyWebServiceResponse)
org.powermock.reflect.exceptions.ConstructorNotFoundException:未能在com.myCompany.GenericFoo类中查找参数类型为[com.myCompany.mywebservicesponse]的构造函数。
…[堆栈跟踪被截断]
原因:java.lang.NoSuchMethodException:com.myCompany.GenericFoo.(com.myCompany.MyWebServiceResponse)
有没有办法让泛型构造函数在这种情况下返回特定对象?错误的根本原因是构造函数的参数类型在运行时是
Class
(编译时是Class
,而不是mywebservicesponse
)
所以使用
.withParameterTypes(Class.class)
应该可以工作。这就清除了异常,尽管我认为模拟实际上不起作用:在创建
GenericFoo
的后续实例时,不会返回特定实例,而是返回一个执行不同代码并产生不同结果的常规实例。可能您忘记使用了?是的,看起来是这样的MyAction
是创建的GenericFoo
,我忘了将其添加到PrepareForest中。
.withParameterTypes(Class.class)