使用Mockito@InjectMocks初始化Example实例时抛出异常求助
问题解决思路
首先明确问题:你用@InjectMocks时,Mockito会自动尝试创建Example实例,但你的Example无参构造里调用super(Example.class)抛出了异常,导致实例化失败。
几种可行的解决办法:
1. 手动实例化+手动注入依赖
跳过Mockito自动创建实例的逻辑,自己处理构造过程,再把Mock的依赖注入进去:
public class Test{ // 如果Example或父类需要依赖,先Mock出来 @Mock private ParentRequiredDependency mockParentDep; private Example example; @BeforeMethod public void setUp(){ MockitoAnnotations.initMocks(this); // 手动处理构造,捕获异常排查问题 try { example = new Example(); // 如果需要给Example或父类注入依赖,用Setter或者反射赋值 // example.setParentDep(mockParentDep); } catch (Exception e) { // 打印异常栈,定位父类构造抛异常的具体原因 e.printStackTrace(); throw new RuntimeException("创建Example实例失败", e); } } }
2. 用@Spy代理已初始化的实例
如果必须保留现有构造逻辑,先自己成功创建Example实例,再让Mockito把它转为Spy对象:
public class Test{ @Spy private Example example; @BeforeMethod public void setUp(){ try { // 先手动创建实例,确保构造不抛异常 example = new Example(); // 初始化Mockito注解 MockitoAnnotations.initMocks(this); } catch (Exception e) { throw new RuntimeException("初始化Example Spy失败", e); } } }
3. 排查并修复父类构造的异常根源
最根本的是搞清楚super(Example.class)为什么会抛异常:
- 检查父类构造函数对传入的
Class参数有没有校验逻辑(比如是否允许传入当前子类的Class) - 查看父类构造里有没有其他可能抛出异常的代码(比如IO操作、未初始化的静态资源等)
- 尝试调整传入父类的参数,比如换成其他合法的Class对象,看是否能正常构造
内容的提问来源于stack exchange,提问作者Pavan kalyan athukuri
相关产品推荐
相关产品推荐

