旅人葉 2024-01-19 17:31 采纳率: 100%
浏览 11
已结题

mock模拟insert请求 junit4mockito.java.ft

各位大师,有个问题,在写单元测试时发现业务逻辑中.有一段是这种写法
if(item.getId()==null){
mapper.insert(item);
String newId=item.getId();
if(newId!=null){
……
}
}
这种id来自于自增处理,我在模拟时如何能补充这个id,让他能够继续执行后续逻辑呢

  • 写回答

3条回答 默认 最新

  • woc ??? 2024-01-19 20:09
    关注

    在使用 Mockito 进行单元测试时,如果需要模拟自增 ID 的行为,你可以使用 thenAnswer 方法,通过一个自定义的 Answer 对象来处理。

    假设你有一个 ItemMapper 接口和对应的 ItemService 服务,可以按照以下方式来模拟自增 ID 的行为:

    import static org.mockito.Mockito.*;
    
    public class ItemServiceTest {
    
        @Test
        public void testInsertWithGeneratedId() {
            // 创建一个 mock 的 ItemMapper
            ItemMapper itemMapper = mock(ItemMapper.class);
    
            // 创建一个 ItemService,并将 mock 的 ItemMapper 注入
            ItemService itemService = new ItemService(itemMapper);
    
            // 创建一个 Item 对象,这里不设置 ID
            Item item = new Item();
            item.setName("Example Item");
    
            // 模拟插入操作,并设置 Answer 来模拟生成自增 ID
            when(itemMapper.insert(any(Item.class))).thenAnswer(new Answer<Integer>() {
                private int idCounter = 1;
    
                @Override
                public Integer answer(InvocationOnMock invocation) throws Throwable {
                    Item insertedItem = invocation.getArgument(0);
                    insertedItem.setId(idCounter++); // 模拟生成自增 ID
                    return 1; // 假设插入成功
                }
            });
    
            // 调用业务逻辑
            itemService.insertItem(item);
    
            // 验证插入是否被调用
            verify(itemMapper, times(1)).insert(any(Item.class));
    
            // 验证后续逻辑,可以根据实际情况进行具体验证
            // ...
    
            // 可以通过 item.getId() 获取模拟生成的自增 ID
            assertNotNull(item.getId());
            System.out.println("Generated ID: " + item.getId());
        }
    }
    

    在这个例子中,我们使用 thenAnswer 方法来设置 ItemMapper.insert 方法的行为。Answer 接口允许我们编写一段逻辑,来模拟方法调用的返回值。

    不过呢。。这只是一个示例,实际情况可能需要根据你的业务逻辑和具体情况进行调整。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月19日

悬赏问题

  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)