2008-09-11 23 views

cevap

3

İki açık yol, uyarıyı bastırmak veya bir alt sınıfı taklit etmektir.

private static class SomeClass_Integer extends SomeClass<Integer>(); 
private SomeClass<Integer> someClass; 
... 
    someClass = EasyMock.createMock(SomeClass_Integer.class); 

(Yasal Uyarı: hatta bu kodu derlemek için Denenmedi, ne de EasyMock kullandık.)

+0

sözdizimi muhtemelen olmalıdır: özel statik arayüz SomeClass_Integer SomeClass uzanır {} Ben aynı sorun var ve ben bu yüzden yaklaşım kullanmak etrafında bu iş çalışacak. Ama umarım birisi –

2

Sen @SuppressWarnings("unchecked") ile test yöntemini açıklama olabilir. Bu bir hack ne olduğunu kabul ediyorum ama bence test kodunda kabul edilebilir. değişmezi bir sınıf adı söz konusu olduğunda

@Test 
@SuppressWarnings("unchecked") 
public void someTest() { 
    SomeClass<Integer> someClass = EasyMock.createMock(SomeClass.class); 
} 
+2

için aradığımız cevabı vardır, ama bu beni –

+2

hissediyor. Bu rotaya giderseniz (umarım daha iyi bir yol varsa), @SuppressWarnings'i yerine tümüyle değişken atamaya koymak daha iyidir yöntem. – SamBeran

39

AFAIK, işaretlenmemiş uyarı kaçınamaz ve SuppressWarnings açıklama bu işlemek için tek yoldur.

SuppressWarnings ek açıklamasını olabildiğince dar tutmak için iyi bir form olduğunu unutmayın.

public void testSomething() { 

    @SuppressWarnings("unchecked") 
    Foo<Integer> foo = EasyMock.createMock(Foo.class); 

    // Rest of test method may still expose other warnings 
} 

veya yardımcı yöntemi kullanmak: Tek bir yerel değişken atama için bu ek açıklama uygulayabilirsiniz

@SuppressWarnings("unchecked") 
private static <T> Foo<T> createFooMock() { 
    return (Foo<T>)EasyMock.createMock(Foo.class); 
} 

public void testSomething() { 
    Foo<String> foo = createFooMock(); 

    // Rest of test method may still expose other warnings 
} 
11

Ben, örneğin bir alt sınıf getirerek bu sorunu çalıştı Bu soru aykırı biliyorum ama neden bir Mock Listesinde yerine listesi oluşturamaz

MySpecial<String> myMock = createControl().createMock(MySpecialString.class); 
+0

Ayrıca, soyut sınıfı kullanırken alaylarınızı oluşturmak için EasyMock'ın "org.easymock.classextension.EasyMock" sürümünü kullanmayı da unutmayın. – Andreas

+0

EasyMock 3.0 (Mayıs 2010) itibariyle, org.easymock.classextension'daki sınıflar kullanımdan kaldırılır ve org.easymock'daki aynı adlı sınıflara basit proxy'lerdir. İthalatınızdan ".classextension" öğesini kaldırmanız ve classextension kütüphanesi ile derlemeyi bırakmanız önerilir. – AndrewF

0

:

private abstract class MySpecialString implements MySpecial<String>{}; 

Sonra bu soyut sınıfın bir taklidini oluşturmak?

Daha az kod ve çalışmak daha kolaydır, örneğin listeye öğe eklemek istiyorsanız.

MyItem myItem = createMock(myItem.class); 
List<MyItem> myItemList = new ArrayList<MyItem>(); 
myItemList.add(myItem); 

yerine

MyItem myItem = createMock(myItem.class); 
@SuppressWarnings("unchecked") 
List<MyItem> myItemList = createMock(ArrayList.class); 
expect(myItemList.get(0)).andReturn(myItem); 
replay(myItemList); 
İlgili konular