問(wèn)題描述
我想測(cè)試 AppleProcessor
類中有一個(gè)方法:
I have a method in the class AppleProcessor
which I would like to test:
public void process(Fruit fruit) {
if(fruit.getType() == Fruit.APPLE) {
fruitBasket.add(((AppleFruit) fruit).getApple());
}
else {
// do something else
}
}
注意,F(xiàn)ruit 是 AppleFruit 實(shí)現(xiàn)的方法 getType()
的接口,并且還有一個(gè) getApple()
方法.
Note that Fruit is an interface with the method getType()
which AppleFruit implements and also has a getApple()
method.
我的測(cè)試看起來(lái)像:
@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));
}
但是我收到以下錯(cuò)誤:
java.lang.ClassCastException: package.fruit.Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54 無(wú)法轉(zhuǎn)換為 package.fruit.AppleFruit
來(lái)自測(cè)試中的這一行
when(((AppleFruit)fruit).getApple()).thenReturn(apple);
有人知道如何解決這個(gè)問(wèn)題,以便我可以測(cè)試我的代碼嗎?
Would anyone know how to resolve this so I can test my code?
推薦答案
當(dāng)你說(shuō)
@Mock
Fruit fruit;
你告訴 Mockito:fruit
變量應(yīng)該是 Fruit
的一個(gè)實(shí)例.Mockito會(huì)動(dòng)態(tài)創(chuàng)建一個(gè)實(shí)現(xiàn)Fruit
的類(這個(gè)類是Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54
),并創(chuàng)建這個(gè)類的一個(gè)實(shí)例.這個(gè)類沒(méi)有理由成為 AppleFruit
的實(shí)例,因?yàn)槟鷽](méi)有告訴 Mockito 該對(duì)象必須是 AppleFruit 類型.
You tell Mockito: the fruit
variable should be an instance of Fruit
. Mockito will dynamically create a class which implements Fruit
(this class is Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54
), and create an instance of this class. There's no reason for this class to be an instance of AppleFruit
, since you didn't tell Mockito that the object had to be of type AppleFruit.
將其聲明為AppleFruit
,其類型為AppleFruit
.
Declare it as AppleFruit
, and it will be of type AppleFruit
.
這篇關(guān)于Mockito ClassCastException - 無(wú)法投射模擬的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!