AEM Servlet的JUnit5测试出现Resource resolver已关闭异常
AEM JUnit5测试ResourceResolver已关闭异常的解决办法
不要手动关闭ResourceResolver
AEM测试上下文(如AemContext)会自动接管ResourceResolver的生命周期,测试完成后统一回收资源。如果代码中手动调用resourceResolver.close(),会导致框架后续清理时发现资源已被关闭,抛出异常。检查Servlet及测试代码,移除所有手动关闭的逻辑。通过测试上下文正确获取ResourceResolver
必须使用测试上下文提供的aemContext.resourceResolver()方法获取实例,禁止自行创建ResourceResolver。自行创建的实例不受上下文生命周期管理,极易引发资源冲突。避免断言后操作ResourceResolver
测试响应验证通过后,不要再调用ResourceResolver的任何方法。此时测试上下文已进入资源清理阶段,ResourceResolver处于待关闭状态,后续操作必然触发异常。清理Servlet中的残留引用
检查Servlet代码,确保没有在doGet/doPost等请求处理方法之外持有ResourceResolver的引用(比如存在成员变量中)。这类残留引用会在测试结束后,于框架回收资源时引发操作冲突。
错误与正确代码示例
错误示例(手动关闭)
ResourceResolver resolver = aemContext.resourceResolver(); try { // 业务逻辑处理 } finally { resolver.close(); // 手动关闭导致后续框架报错 }
正确示例(上下文管理)
ResourceResolver resolver = aemContext.resourceResolver(); // 直接使用资源解析器处理业务 // 无需手动关闭,测试上下文会自动回收
内容的提问来源于stack exchange,提问作者Kamal Kannan
相关产品推荐
相关产品推荐

