2015-02-11 10 views
8

döküm edilemez getApple() yöntemi.mockito ClassCastException bir sahte I test etmek istiyorum sınıf <code>AppleProcessor</code> bir yöntemi vardır

Testim benziyor:

@Mock 
FruitBasket fruitBasket; 

@Mock 
Fruit fruit; 

@Mock 
AppleFruit apple; 

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

@Test 
public void testAnAppleIsProcessed() { 
    AppleProcessor appleProcessor = new AppleProcessoer(); 
    when(fruit.getType()).thenReturn(Fruit.APPLE); 
    when(((AppleFruit) fruit).getApple()).thenReturn(apple); 

    appleProcessor.process(fruit); 

    verify(fruitBasket).add(isA(Apple.class)); 
} 

Ancak aşağıdaki hatayı alıyorum: testinde bu hattan gelen

java.lang.ClassCastException: package.fruit.Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54 cannot be cast to package.fruit.AppleFruit

when(((AppleFruit) fruit).getApple()).thenReturn(apple);

misiniz kimse k şimdi bunu nasıl çözebilirim böylece kodumu test edebilirim?

cevap

22

Eğer

@Mock 
Fruit fruit; 

derken Sen Mockito söyle: fruit değişken Fruit örneğidir olmalıdır. Mockito, Fruit'u (bu sınıf Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54) uygulayan bir sınıfı dinamik olarak oluşturacak ve bu sınıfın bir örneğini oluşturacaktır. Bu sınıfın AppleFruit örneğinin olması için bir neden yok, çünkü Mockito'ya nesnenin AppleFruit türünde olması gerektiğini söylemediniz.

AppleFruit olarak bildirin ve AppleFruit türünde olacaktır.

+0

Teşekkürler, test şimdi çalışıyor. – user2844485

0

Sahte nesneniz Mockito tarafından geliştirilmiştir ve sınıfınız ile aynı değildir, bu nedenle yayın yazamazsınız.

+0

Sahte bir nesne kullanmadan etrafta bir yol yok mu? – user2844485

+2

Kesinlikle var. AppleFruit örneğiyle, meyve değil yöntemini çağırmanızı öneririm. –

İlgili konular