使用Mockito verify方法时遭遇NotAMockException的原因排查
Mockito verify()抛出NotAMockException的原因
问题代码
CarService类
public class CarService { private final VinService vinService; public void checkCar(String VIN) { // 此处为业务逻辑:创建列表、传入VIN、添加Consumer等 vinService.checkVin(list, VIN, consumer); // VinService的checkVin方法为void类型 } }
测试类
@ExtendWith(MockitoExtension.class) public class CarServiceTest { private static final String VIN = "1G100000000000000" // 缺少分号 @Mock private CarService carService; // 错误地Mock了待测试的类 @Mock private VinService vinService; @Test void vinShouldBeCheckedSuccessfully() { // when carService.checkCar(VIN); // then Mockito.verify(vinService, Mockito.times(1)).checkVIN( // 方法名大小写不匹配 Mockito.anyList(), Mockito.anyString(), Mockito.any()); // Consumer参数 } }
错误信息
org.mockito.exceptions.misusing.NotAMockException: Argument passed to verify() is of type VinService and is not a mock! Make sure you place the parenthesis correctly! See the examples of correct verifications: verify(mock).someMethod(); verify(mock, times(10)).someMethod(); verify(mock, atLeastOnce()).someMethod();
异常产生的原因
- 待测试类被错误Mock:你需要测试
CarService的真实业务逻辑,但代码中给CarService加了@Mock注解,调用Mock对象的checkCar()不会执行真实代码,自然不会触发vinService.checkVin()的调用。 - Mock实例未关联:即使Mock了
VinService,这个实例也没有注入到CarService中,两者没有关联关系。 - 语法错误导致Mock初始化失败:测试类中
VIN常量定义末尾缺少分号,编译错误会导致Mockito的@Mock注解无法正常初始化VinService实例,使得传入verify()的不是Mock对象。 - 方法名大小写不匹配:
CarService中调用的是checkVin()(小写vin),但测试中verify()里写的是checkVIN()(大写VIN),方法名不匹配会触发Mockito异常。
修正示例
@ExtendWith(MockitoExtension.class) public class CarServiceTest { private static final String VIN = "1G100000000000000"; // 修复分号 @InjectMocks // 自动将Mock的VinService注入真实的CarService实例 private CarService carService; @Mock private VinService vinService; @Test void vinShouldBeCheckedSuccessfully() { // when carService.checkCar(VIN); // then Mockito.verify(vinService, Mockito.times(1)).checkVin( // 修正方法名 Mockito.anyList(), Mockito.eq(VIN), // 用eq()匹配具体VIN值,测试更精准 Mockito.any(Consumer.class)); // 指定Consumer类型,避免模糊匹配 } }
内容的提问来源于stack exchange,提问作者TheFastestTurtle
相关产品推荐
相关产品推荐

