You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot使用Mockito测试多对多关联添加方法时JUnit找不到测试问题

问题原因
  • JUnit找不到测试的核心原因:你当前使用的是JUnit 4框架(报错日志对应JUnit4内部类),JUnit4要求所有测试方法必须为public修饰,你编写的测试方法AddActorToChapters为默认包访问权限,无法被框架扫描识别,因此抛出找不到测试的报错。另外如果测试类未添加Mockito对应运行/扩展注解,也会导致测试未被识别。
  • 此前编译错误及测试逻辑错误原因:
    1. 业务方法入参调用传反:待测试方法AddActorToChapter第一参数为演员ID、第二参数为章节ID,你测试调用时顺序颠倒,会触发逻辑异常。
    2. 模拟数据预赋值冲突:MockData的getActor方法已经提前给Actor对象添加了测试用Chapter,调用业务方法时会触发重复校验,直接抛出DuplicateException。
    3. 断言类型不匹配:你断言比较的两个对象一个是Chapter集合、一个是单个Chapter实例,类型不统一会抛出断言错误。
    4. 类名拼写笔误:业务代码中ActorParticpateMapper拼写错误(正确应为ActorParticipateMapper,缺少字母i),也会导致编译失败。
解决方案
  1. 修复测试方法访问权限:给测试方法添加public修饰符,测试类对应添加Mockito注解:
    • JUnit4环境给测试类加@RunWith(MockitoJUnitRunner.class)
    • JUnit5环境给测试类加@ExtendWith(MockitoExtension.class)
  2. 调整业务方法调用参数顺序:将测试调用改为service.AddActorToChapter(MockData.getActor().getId(), MockData.getChapter().getId());
  3. 修改MockData逻辑:删除getActor方法中actor.getChapters().add(getChapter());这行预赋值代码,避免触发重复校验。
  4. 修正断言逻辑:改为判断集合包含指定章节,例如assertTrue(MockData.getActor().getChapters().contains(MockData.getChapter()));
  5. 修正Mapper类名拼写错误,解决编译问题。

内容的提问来源于stack exchange,提问作者ayman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:57:02