2010-05-27 28 views
26

Birim sınama yapmaya çalıştığım bir yöntem var. Bu yöntem bir parametreyi bir ArrayList olarak alır ve onunla bir şeyler yapar. Ben tanımlamak çalışıyorum sahte olduğunu. Bir [kontrolsüz] kontrolsüz dönüşüm" uyarı verirmockito ArrayList <String> Sorun

ArrayList<String> mocked = mock(ArrayList.class); 

ArrayList<String> mocked = mock(ArrayList<String>.class); 

bana bir hata verir

Herkes bakım için beni aydınlatmak. ne yapıyorum yanlış

cevap

52

alternatif sonra mockito jenerik türünü bulmak için tip yansıma kullanabilirsiniz beri @Mock ek açıklama kullanmaktır: Bir yan not olarak

public class MyTest { 

    @Mock 
    private ArrayList<String> mockArrayList; 

    ... 

    public void setUp() { 
    MockitoAnnotations.initMocks(this); 
    } 

    public void testMyTest() { 
    when(mockArrayList.get(0)).thenReturn("Hello world"); 

    String result = mockArrayList.get(0); 

    assertEquals("Should have the correct string", "Hello world", result); 

    verify(mockArrayList).get(0); 
    } 
} 
+1

Teşekkürler. Akıllı çözüm. Bu haksızlık, bu onun işaretli değil. – pimpf0r

+0

Harika cevap, bu yaklaşımı kullanarak bitti. –

+0

Evet, bu soruya çağlardan beri bakma ... Üzgünüm. – Sardathrion

23

ArrayList<String>.class, Java derleyicisi tarafından desteklenmeyen bir yapıdır.

Eğer ilk denemede için

, bunu yapmalıdır: mock yöntem yalnızca ham türü dönebilirsiniz çünkü

@SuppressWarnings("unchecked") 
ArrayList<String> mocked = mock(ArrayList.class); 

bu gerçekleşir. Genel olarak, ham türlerini kullanmak iyi değildir çünkü bu, çalışma zamanı hatalarına neden olabilir. Durumunuzda gayet iyi, çünkü mocked'un GERÇEK ArrayList<String> olduğunu bilmiyorsunuz.

Sadece @SuppressWarnings("unchecked") ek açıklamaları hakkında genel bir öneri. Sorunun kaynağına olabildiğince yakın tutmaya çalışın. Örneğin, sadece değişken bildirim için koyabilirsiniz ya da tüm yöntem için onu bastırabilirsiniz. Genelde bir değişken için onu bastırın, çünkü aksi takdirde geniş metot ek açıklamaları fonksiyonunuzdaki diğer problemleri bastırabilir.

+3

, bu özel sorunu sayfalarında (Madde 24 olarak tartışılmaktadır 116- 118) Etkin Java, İkinci Baskı. Tüm Generics bölümü, Sun'ın sitesinde PDF olarak mevcuttur: http://java.sun.com/docs/books/effective/generics.pdf – Powerlord

+0

Bu mantıklıdır. Genel olarak uyarıları ihmal etmekten hoşlanmıyorum ama sadece bir satırı görmezden geldiğinin farkında değildim. Teşekkürler. – Sardathrion