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

