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)