我试图用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);
答案 0 :(得分:0)
使用T参数化接口意味着必须在编译时定义类型。问题在于您获得myClassMocked
的方式,这就是为什么它期望“任何”通配符?
。
您应该模拟myClass
接口的子类,该接口使用extends SomeClass
类型进行参数化,例如:
public class myClassImpl implements myClass<SomeSubclassOfSomeClass>{
public void myMethod(SomeSubclassOfSomeClass parameter){...}
public void myOtherMethod(){...}
}