2011-08-25 1 views
5

Sto tentando di acquisire un argomento utilizzando Mockito. Questo argomento è di tipo List<MyClass>. Ma non riesco a trovare la sintassi corretta per specificarlo.Specificare la classe di un'interfaccia generica per simulare

io posso fare questo:

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

Ma non ottengo questo per compilare:

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

Esiste un modo?

+0

possibile duplicato di [Come catturare un elenco di tipo specifico con Mockito] (http://stackoverflow.com/questions/5606541/how-to-capture-a-list-of- specifico-tipo-con-mockito) – xtofl

risposta

4

Purtroppo no, .class restituisce solo l'oggetto Class<List>, dove List è un rawtype. L'implementazione non è perfetta e non è possibile ottenere informazioni sul tipo annidato utilizzando .class. Qualcosa come List<Foo>.class non è sintassi valida perché nessun oggetto Class<List<Foo>> esiste ovunque.

+0

Cosa intendi con 'l'implementazione non è perfetta'? – xtofl

+0

Mi riferivo all'implementazione dei generici da parte della lingua. –

+0

:) Non posso che concordare (è stato rovinato dal C++ credo) – xtofl

3

Penso che ciò avvenga perché Java non determina staticamente il tipo di una classe parametrizzata.

Lo stesso modo in cui questo non può essere compilato:

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

E questo né come in cima al problema di risoluzione di tipo List è un'interfaccia:

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

Ma questo non compilare e si può probabilmente fare qualcosa di simile:

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

// and later in the code: 

Class<?> c3 = MyList.class; 
14

dovrebbe funzionare utilizzando il @Captor della nota:

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

Grazie che funziona per me. Si noti che un 'MockitoAnnotations.initMocks (this);' è necessario. (vedi anche http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Captor.html) –