Jiang_LH01 2024-06-03 21:43 采纳率: 50%
浏览 5

单元测试 mock数据出错,如何解决?(相关搜索:返回值)

img


单元测试,使用mock出来的对象,使用this.save() 返回值应该是布尔,但是一直报错 让返回int

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-03 21:43
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的截图内容,问题出现在单元测试中对UserServicesave方法的mock行为设置上。错误信息提示Boolean cannot be returned by insert(),意味着insert()方法期望返回的是一个int类型,而不是boolean类型。这通常发生在测试数据库操作时,因为数据库的插入操作通常返回的是受影响的行数(即int类型),而不是一个布尔值表示操作是否成功。

    要解决这个问题,您需要确保mock的行为与实际方法的期望行为一致。以下是一些可能的解决方案:

    1. 检查save方法的实现:首先,您需要确认UserService中的save方法是否调用了insert()方法,并且insert()方法的返回类型是否为int

    2. 正确设置mock行为:如果insert()方法确实应该返回int,那么您需要使用doReturn()而不是when()来设置mock的行为。when()通常用于设置方法的返回值,而doReturn()用于设置方法的返回值并立即返回,这在测试中更为常见。

    3. 修改测试代码:根据错误信息,您的测试代码中可能错误地使用了when(userService.save(any(User.class))).thenReturn(true);。如果save方法实际上调用了insert(),并且insert()返回int,那么您应该这样设置mock:

      when(userMapper.insert(any(User.class))).thenReturn(1); // 假设insert()方法返回1
      
    4. 使用正确的断言:确保您的测试断言与save方法的返回类型一致。如果save返回boolean,那么您的测试应该检查这一点:

      assertTrue(userService.save(user));
      
    5. 检查多线程测试:错误信息中提到了多线程测试的限制,确保您的测试不是在多线程环境下运行,或者正确地处理了并发问题。

    6. 查阅Mockito文档:如果需要更详细的帮助,可以查阅Mockito的官方文档,特别是关于when()doReturn()的用法。

    7. 参考社区和论坛:您可以在Stack Overflow等社区搜索类似问题,或者在相关论坛发帖求助。

    请注意,由于您提供的截图中代码片段不完整,以上建议是基于错误信息和常见的单元测试实践。您可能需要根据实际情况调整解决方案。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月3日

悬赏问题

  • ¥15 QT任务管理器无法正确获取展开,有悬赏15元速求,如何解决?(相关搜索:标识符|结构体)
  • ¥15 使用delphi 10.3+intraweb 生成的页面怎么实现自动滚屏
  • ¥20 思科:Router c3600 MN-4E插槽
  • ¥15 16进制修改视频的元数据
  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据