2011-08-25 3 views
5

Mockito를 사용하여 인수를 캡처하려고합니다. 이 인수의 형식은 List<MyClass>입니다. 하지만 그것을 지정하는 적절한 구문을 찾을 수 없습니다.모의 할 일반 인터페이스 클래스를 지정하십시오.

ArgumentCaptor<MyClass> captor = 
    ArgumentCaptor.forClass(MyClass.class); 

을하지만 컴파일하지 않습니다 :

나는 이 작업을 수행 할 수 있습니다

ArgumentCaptor< List<MyClass> > captor = 
    ArgumentCaptor.forClass(List<MyClass>.class); 

방법이 있나요?

+0

가능한 중복 (http://stackoverflow.com/questions/5606541/how-to-capture-a-list-of- [mockito와 특정 유형의 목록을 캡처하는 방법] specific-type-with-mockito) – xtofl

답변

4

아니요, .classClass<List> 개체 만 반환합니다. 여기서 List은 원시 형식입니다. 구현이 완벽하지 않으며 .class을 사용하여 중첩 된 유형 정보를 얻을 수 없습니다. Class<List<Foo>> 개체가 어디에도 존재하지 않으므로 List<Foo>.class과 같은 문구가 잘못되었습니다.

+0

'구현이 완벽하지 않다'는 것은 무엇을 의미합니까? – xtofl

+0

나는 언어의 제네릭 구현을 언급하고 있었다. –

+0

:) 나는 동의 할 수 있지만 (C++에 의해 망쳐 놓은 것 같습니다) – xtofl

3

자바가 parametreized 클래스의 유형을 정적으로 결정하지 않기 때문이라고 생각합니다.

Class<?> c1 = ArrayList<String>.class; 

를 그리고이 둘 유형 확인 문제 List의 상단에 같은 인터페이스입니다 :

같은 방법이 컴파일되지 않습니다

Class<?> c2 = List<String>.class; 

그러나 이것은 컴파일 않으며, 당신은 할 수 아마도 비슷한 것을하십시오 :

public class MyList implements List<String> { 
    ... the List's methods to implement ... 
} 

// and later in the code: 

Class<?> c3 = MyList.class; 
14

@Captor 주석 :

@Captor 
    private ArgumentCaptor<ArrayList<SomeType>> captor; 
+1

고마워요. 저에게 좋습니다. 'MockitoAnnotations.initMocks (this);' 필요합니다. (http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Captor.html 참조) –

관련 문제