2017-03-02 37 views
7

için yükseltme varargs yöntemi için argümanlar için geçerli değilim Java 1.7 ile birim sınama için projemde Mocikto çerçeve (sürüm 1.9.5) kullanıyorum Şimdi projeyi geçiriyorum Oluşturun ve Java 1.8 ile çalıştırın. Benim Java sürüm yükseltilmiş zaman Tür içinde yöntem, Java 1.8

benim birim sınama birinde ben

String learningId = "testLeaId"; 
String catalogId = "testCatId"; 
List<String> returnList = new ArrayList<String>(); 
returnList.add(catalogId); 
when(myService.myMethod(Mockito.anyString(), Mockito.any(MyMapper.class), (Argument[]) Mockito.anyVararg())).thenReturn(returnList); 

Bu kod bu kodla yöntemle

public <T> List<T> myMethod(final String sql, final MyMapper<T> MyMapper, final Argument... args) 

aşağıdaki alay çalışıyorum şimdi Java 1.7 ile çalışıyor benim pom.xml'Bu 1.8'e ben ... şu hatayı alıyorum

[ERROR] The method myMethod(String, MyMapper<T>, Argument...) in the type MyService is not applicable for the arguments (String, MyMapper, Argument) 
     C:\somepath\MyDaoTest.java:59 

Bu hatayı çözmemde bana yardımcı olan var mı? Teşekkürler

+0

Bir derleme hatasıdır, bu myService'de böyle bir duruma neden olabilecek bazı belirsiz yöntem bildirimleri olabilir, yöntem imzanız ve sahte görünümünüz tam olmasına rağmen, bu MyService sınıfı hakkında daha fazla ayrıntı yayınlayabilir misiniz? IDE'nizde herhangi bir hata/uyarı almıyor musunuz? –

+1

Ne java 1.7, ne de 1.8 sizinki ile aynı kod ile hata var, belki sizin testler modası geçmiş yöntemler, sınıflar vb. Atıfta bulunuluyor maven kullanıyor musunuz? Hiçbir şey akla gelir dışında bir 'mvn temiz yükleme', yapmaya çalışın, deneyin:/ –

+0

İpucu: hala cevaplar ** herhangi bir ** geribildirim bekliyor. Ben sadece burada sorular sormak ve geri bakmak için rahatsız asla yenibies olduğunu düşündüm ;-( –

cevap

-1

Bence, Java 8, MyMapper<T> sahip olmak istediğinden, ancak yalnızca MyMapper ile erişiyorsanız biraz daha fazla kayıt türüdür.

Çözüm böylece örneğin

Mockito.any(MyMapper.class) 

için
Mockity.any() 

değiştirmek gerekir, Java8, tür kesmesi iyileştirilmiştir ile Mockito.<MyMapper<ConcreteType>>any()

+0

Benim cevabımı bakın: Ben bile bu tür ipuçları artık gerekli olduğunu düşünüyorum! –

+0

Ben de hiçbir şey düşürdü;) .. sürümleri çalışırdı. Ama benimki daha spesifik olacaktı, çünkü bunu test etmek istiyorsan, jenerik için somut bir tip talep ediyor. – KLHauser

0

kullanmak olabilir. (Mockito'nun kendisinin son bir sürümünü kullandığınızı varsayarak)

Ve daha sonra bulabilirsiniz ... anyVarArg() deprecated ve bunun için herhangi bir() kullanabilirsiniz!

+0

Tip çıkarımı, parametreli tipler için geliştirilmiştir. Bu durumda, "Mockito.any (MyMapper.class)" türü "MyMapper", "MyMapper " değil, bu yüzden ham bir türdür. Yazım türü, türlere göre ham türlere yardımcı olmaz. –

+0

Takip edebileceğimden emin değilim. Hata iletisi tam olarak bu konuda şikayet ediyor: MyMapper.class ... türünde herhangi bir (MyMapper.class) sonucu ... ama yeni Mockito 2.10+ herhangi bir() geliştirilmiş ** beklenen ** tip MyMapper 'döndürecektir? ! –

+0

Üzgünüm, cevabınızı yanlış okur. Evet ben size katılıyorum. –