我想在类AppleProcessor中测试一个方法:
public void process(Fruit fruit) {
if(fruit.getType() == Fruit.APPLE) {
fruitBasket.add(((AppleFruit) fruit).getApple());
}
else {
// do something else
}
}
请注意,Fruit是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。水果$$EnhancerByMockitoWithCGLIB$$b8254f54不能强制转换为包装。水果。苹果柚
它来自测试中的这一行
当(((AppleFruit)水果). getApple()). then返回(苹果);
有人知道如何解决这个问题,以便我可以测试我的代码吗?
Mockito可以处理在模拟时(赋值)已经强制转换的模拟对象。但是,它不会在代码执行期间自行强制转换模拟对象。
换句话说(最好是代码):
Fruit fruit = Mockito.mock(Applefruit.class);
照我说的做,你会没事的。我有一个类似的问题,他的解决方案奏效了。
对于这个问题,它将是:
@Mock
FruitBasket fruitBasket;
@Mock
AppleFruit fruit; // changed here
@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));
}
这就是所需要的一切。
对于搜索此内容的任何人,只需包括:
@Mock(extraInterfaces = {AppleFruit.class})
Fruit fruit;
这将为模拟添加一个额外的界面,演员阵容不会引发任何异常。
当你说
@Mock
Fruit fruit;
你告诉Mockito:果子
变量应该是果子
的一个实例。Mockito将动态创建一个实现果子
的类(这个类是果子$$EnhancerByMockitoSusCGLIB$$b8254f54
),并创建这个类的实例。这个类没有理由成为AppleFruit
的实例,因为你没有告诉Mockito对象必须是AppleFruit类型。
将其声明为Applefuit,其类型为Applefuit。
问题内容: 我想从数据库中获取价值,就我而言,我曾经从数据库中获取价值,但是却遇到了这个错误 这是我的代码 任何帮助将是荣幸:) @raffian,你的意思是这样吗? 问题答案: 问题是 这将返回一个 对象数组 列表 (Object []), 其中包含表中每一列的标量值。Hibernate将使用ResultSetMetadata推断返回的标量值的实际顺序和类型。 解 相关连结 使用迭代器
问题内容: 为什么在我的程序中触发java.lang.ClassCastException? java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为com.App.Equip] 该查询返回已回答(在CheckLists calsse中找到)但尚未由Equip对象回答的清单的列表 -这是代码: -我的java类: 我想将我的SQl查询的结果格式化
问题内容: Group.java 这是我的方法。 我认为还可以,但是有一些例外: HTTP状态500 –内部服务器错误h1 {font-family:Tahoma,Arial,sans-serif; color:white; background-color:#525D76; font-size:22px;} h2 {font-family:Tahoma,Arial,sans- 衬线;颜色:白色;
本文向大家介绍Swift投射,包括了Swift投射的使用技巧和注意事项,需要的朋友参考一下 示例 将函数应用于集合/流并创建新的集合/流称为投影。
我不熟悉匕首和莫基托。我尝试在单元测试中使用Dagger模块中定义的构造函数,以便使用默认值创建对象。 这是模块: @模块类自动关闭倒计时模块{ 这就是我在单元测试中模拟AutoCloseCountDown类的方法: @RunWith(MockitoJUnitRunner.class)公共类AutoCloseCountDownTimerTest{ 如何实现自动关闭的CountDownTimer将在
这个类用于进行raycasting(光线投射)。 光线投射用于进行鼠标拾取(在三维空间中计算出鼠标移过了什么物体)。 代码示例 const raycaster = new THREE.Raycaster(); const mouse = new THREE.Vector2(); function onMouseMove( event ) { // 将鼠标位置归一化为设备坐标。x 和 y 方向的