2013-07-02 3 views
1

아래의 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))); 

컴파일 오류 : 내가 가지고있는

The method myMethod(capture#6-of ?) in the type myClass is not applicable for the arguments (SomeClass)

다른 호환 가능한 클래스로 Object.class를 전환하고 일치 프로그램을 사용하여 놀았습니다.

간단히 메소드 서명을 변경할 수 없습니다. 너무 쉽습니다.

길고 짧은이 특정 메서드 호출을 무시하고 싶지만 내 테스트 메서드에서 다른 작업에 사용하고있는 서비스이기 때문에 전체 MyClass 모의을 무시할 수 없습니다.

EDIT : T는 타입 컴파일 시간에 정의 될 수있는 것을 의미 수정이 인터페이스를 Parametrizing final myClass<SomeClass> myClassMocked= mockery.mock(myClass.class);

답변

0

final myClass<?> myClassMocked= mockery.mock(myClass.class); (식 제안 일반 사양)을 변경합니다. 문제는 당신이 myClassMocked을 얻는 방법에 있습니다. 그래서 그것이 "any"와일드 카드 ?을 기대합니다.

당신은 유형 매개 변수화 myClass 인터페이스의 서브 클래스를 조롱한다 예를 들어 extends SomeClass 그 :

나는 내 모의를 선언 할 때, 나는 통과 한 것으로 나타났습니다 때 나는 내 테스트 클래스를 리팩토링하고 있었다
public class myClassImpl implements myClass<SomeSubclassOfSomeClass>{ 
    public void myMethod(SomeSubclassOfSomeClass parameter){...} 
    public void myOtherMethod(){...} 
} 
+1

그것은 와일드 카드입니다. 나는 그것을 바꿨고 모든 것이 지금 일하고있다. 나를 올바른 방향으로 가리켜 주셔서 감사합니다. – AnthonyW