2011-09-09 14 views
8

gelen aşırı yüklenmiş bir java jenerik yöntemin çağrılması, ve bu konuyaBir un-parametrize ArrayList döndüren bir yöntem ile bir nesneyi alay etmek Mockito kullanıyorum scala

Yöntem imza işe almak için anlamaya olamaz sahte

public java.util.ArrayList getX() 

Testi kodu

var mockee = mock(classOf[Mockee]) 
when(mockee.getX).thenReturn(Lists.newArrayList(x): ArrayList[_]) 

Thi s aslında IntelliJ ince derler ama zamanında atar: Benim için

[error] ....scala:89: overloaded method value thenReturn with alternatives: 
[error] (java.util.ArrayList[?0],<repeated...>[java.util.ArrayList[?0]])org.mockito.stubbing.OngoingStubbing[java.util.ArrayList[?0]] <and> 
[error] (java.util.ArrayList[?0])org.mockito.stubbing.OngoingStubbing[java.util.ArrayList[?0]] 
[error] cannot be applied to (java.util.ArrayList[_$1]) 
[error]  when(mockee.getX).thenReturn(Lists.newArrayList(x): ArrayList[_]) 
+0

Yanlış olabilirim, ama Scala'da ArrayList [_] 'parametresinin parametrelenmemiş bir ArrayList ile aynı olmadığını düşündüm, bu varoluşsal bir türüdür - yani bir tür parametresi vardır, ama komik bir yere bağlı. Ben parametrelenmemiş tipin 'java.lang.Object' tarafından parametrelenen' ArrayList [AnyRef] 'olacağını düşünüyorum. – Owen

+1

Bu, bir derleme zamanı hatası gibi görünüyor, çalışma zamanı hatası değil. Scala'nın varoluşsal türü olan ArrayList [_] ', Java'nın joker karakteri olan ArrayList ' a en yakın yaklaşımdır. Aslında * ham tip *, ArrayList var. Bakmanız gereken iki soru: [Scala'nın varoluş türleri] (http://stackoverflow.com/questions/1031042/scalas-existential-types) ve [Raw türleri ve joker ...] (http://stackoverflow.com/ soruları/3489947/raw-types-unbounded-wilcard-ve-sınırlı-joker) –

+0

Haklısınız, derleme zamanı hatasıdır, ancak scala eklentisi tarafından vurgulanmamıştır. Ben 'thenAnswer (yeni Cevap [ArrayList [_]] {def cevap (arg: InvocationOnMock) = Lists.newArrayList (x)}) 'kullanarak bu konuda çalışabilirim ama bu çok güzel değil –

cevap

8

aşağıdaki çalışır:

val mockee = mock(classOf[Mockee]) 
when[ArrayList[_]](mockee.getX).thenReturn(Lists.newArrayList) 

"Listeler" sınıfı hakkında koleksiyonları (şimdi Guava) dan olduğunu varsayarak.

+0

Mükemmel - Asla eklemek istedim yöntem parametresi –

İlgili konular