为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 java 中返回迭代器的同一类中模拟方法

如何在 java 中返回迭代器的同一类中模拟方法

白板的微信 2022-09-07 16:52:14
我正在尝试对一个方法进行单元测试,该方法调用另一个返回类型位于同一类中的方法。我试图使用 来模拟此方法,但不确定如何返回迭代器。我在这里检查了堆栈溢出的其他答案,但看起来我在这里遗漏了一些东西。getFruitItemMap()getAllItemsBelongingToFruitIteratorMockito.spy()class FruitItemImpl {Map<String, Fruit> getFruitItemMap() {        Map<String, Fruit> fruitMap = new HashMap<>();        Iterator<Fruit> items = getAllItemsBelongingToFruit("Apple");while (items.hasNext()) {            Fruit fruitItem = items.next();            fruitMap.put(fruitItem.getID(), fruitItem);        }        return fruitMap;    }public Iterator<Fruit> getAllItemsBelongingToFruit(String fruit) {      //some logic that returns an iterator}下面是单元测试:    @Test    public void testGetFruitItemMap() {        Map<String, Fruit> fruitItemMap = new HashMap<>();        FruitItemImpl doa1 = Mockito.spy(dao);   Mockito.doReturn(**new Iterator<Fruit>**).when(doa1).getAllItemsBelongingToFruit("Apple") //Here        Assert.assertEquals(fruitItemMap.size(), doa1.getFruitItemMap().size());    }由于我是Mockito和单元测试世界的新手,因此试图弄清楚它。在这种情况下,我不确定如何使mojito返回迭代器。Mockito.doReturn()
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

最简单的方法是收集适当的对象,并从中返回 。在你的例子中,你可以从你在测试中使用的 's 返回一个迭代器:FruitIteratorfruitItemMapvalues()


@Test

public void testGetFruitItemMap() {

    Map<String, Fruit> fruitItemMap = new HashMap<>();

    FruitItemImpl doa1 = Mockito.spy(dao);

    Mockito.doReturn(fruitItemMap.values().iterator()) // Here!

           .when(doa1).getAllItemsBelongingToApple("Apple");

    Assert.assertEquals(fruitItemMap.size(), doa1.getFruitItemMap().size());

}


查看完整回答
反对 回复 2022-09-07
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号