Mockito ClassCastException - A mock cannot be cast(Mockito ClassCastException - 无法投射模拟)
问题描述
我想测试 AppleProcessor
类中有一个方法:
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
}
}
注意,Fruit 是 AppleFruit 实现的方法 getType()
的接口,并且还有一个 getApple()
方法.
Note that Fruit is an interface with the method getType()
which AppleFruit implements and also has a getApple()
method.
我的测试看起来像:
@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);
有人知道如何解决这个问题,以便我可以测试我的代码吗?
Would anyone know how to resolve this so I can test my code?
推荐答案
当你说
@Mock
Fruit fruit;
你告诉 Mockito:fruit
变量应该是 Fruit
的一个实例.Mockito会动态创建一个实现Fruit
的类(这个类是Fruit$$EnhancerByMockitoWithCGLIB$$b8254f54
),并创建这个类的一个实例.这个类没有理由成为 AppleFruit
的实例,因为您没有告诉 Mockito 该对象必须是 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
.
这篇关于Mockito ClassCastException - 无法投射模拟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Mockito ClassCastException - 无法投射模拟
基础教程推荐
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 降序排序:Java Map 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01