gpt4 book ai didi

java - Mockito ClassCastException - 无法转换模拟

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:11 25 4
gpt4 key购买 nike

我想测试 AppleProcessor 类中的一个方法:

public void process(Fruit fruit) {
if(fruit.getType() == Fruit.APPLE) {
fruitBasket.add(((AppleFruit) fruit).getApple());
}
else {
// do something else
}
}

请注意,Fruit 是一个接口(interface),其中包含 AppleFruit 实现的 getType() 方法,并且还有一个 getApple() 方法。

我的测试看起来像:

@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));
}

但是我得到以下错误:

java.lang.ClassCastException: package.fruit.Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54 无法转换为 package.fruit.AppleFruit

来自测试中的这一行

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

有人知道如何解决这个问题以便我可以测试我的代码吗?

最佳答案

当你说

@Mock
Fruit fruit;

您告诉 Mockito:fruit 变量应该是 Fruit 的一个实例。 Mockito会动态创建一个实现Fruit的类(这个类是Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54),并创建这个类的一个实例。没有理由让这个类成为 AppleFruit 的实例,因为您没有告诉 Mockito 该对象必须是 AppleFruit 类型。

将其声明为 AppleFruit,它将是 AppleFruit 类型。

关于java - Mockito ClassCastException - 无法转换模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com