模拟通用参数

时间:2013-07-02 21:17:51

标签: java generics mocking jmock

我试图用JMock模拟下面的方法,我遇到了编译器错误。

类到模拟:

public interface myClass<T extends SomeClass>{
public void myMethod(T parameter);
public void myOtherMethod();
}

模拟期望:

exactly(1).of(myClassMocked).myOtherMethod();
exactly(1).of(myClassMocked).myMethod( with(any(SomeClass.class)) );

编译错误:

  

myClass类型中的方法myMethod(捕获#6-of?)不适用于参数(SomeClass)

我尝试使用其他兼容类切换Object.class并使用匹配器。

我无法简单地更改方法签名,这太容易了。

它的长短是我想忽略这个特定的方法调用,但我不能忽略整个MyClass mock,因为它是我在测试方法中用于其他任务的服务。

修改 修复是改变 final myClass<?> myClassMocked= mockery.mock(myClass.class); (eclipse建议的通用规范) final myClass<SomeClass> myClassMocked= mockery.mock(myClass.class);

1 个答案:

答案 0 :(得分:0)

使用T参数化接口意味着必须在编译时定义类型。问题在于您获得myClassMocked的方式,这就是为什么它期望“任何”通配符?

您应该模拟myClass接口的子类,该接口使用extends SomeClass类型进行参数化,例如:

public class myClassImpl implements myClass<SomeSubclassOfSomeClass>{
    public void myMethod(SomeSubclassOfSomeClass parameter){...}
    public void myOtherMethod(){...}
}