Spring 运行测试时出错

Spring 运行测试时出错,spring,maven,jakarta-ee,junit,spring-security,Spring,Maven,Jakarta Ee,Junit,Spring Security,我正在尝试使用mvn clean install运行测试,但这些错误会停止该过程。我尝试使用JUNIT进行调试,但控制台上没有显示任何内容。 以下是日志: com.datamint.service.impl.EmailServiceImplDevTest:创建在类路径资源中定义了名为“entityManagerFactory”的bean时出错 [orm.xml]:bean实例化失败前的BeanPostProcessor;嵌套异常为org.springframework.beans.factory

我正在尝试使用mvn clean install运行测试,但这些错误会停止该过程。我尝试使用JUNIT进行调试,但控制台上没有显示任何内容。 以下是日志:

com.datamint.service.impl.EmailServiceImplDevTest:创建在类路径资源中定义了名为“entityManagerFactory”的bean时出错 [orm.xml]:bean实例化失败前的BeanPostProcessor;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.methodSecurityMetadataSourceAdvisor”的bean时出错:设置构造函数参数时无法解析对bean“org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource0”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource0”的bean时出错:无法创建[org.springframework.security.access.prepost.PrePostAnnotationSecurityMetadataSource]类型的内部bean“内部bean”使用键[0]设置构造函数参数时;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“内部bean”的bean时出错:在设置构造函数参数时无法创建[org.springframework.security.access.expression.method.ExpressionBasedNotationAttributeFactory]类型的内部bean“内部bean”;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“内部bean”的bean时出错:设置构造函数参数时无法解析对bean“expressionHandler”的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为“expressionHandler”的bean时出错,该bean在类路径资源中定义 [spring security.xml]:设置bean属性“permissionEvaluator”时无法解析对bean“permissionEvaluator”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“permissionEvaluator”的bean时出错,该bean在类路径资源中定义 [spring security.xml]:设置构造函数参数时无法解析对bean“aclService”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“aclService”的bean时出错,该bean在类路径资源中定义 [spring security.xml]:设置构造函数参数时无法解析对bean'lookupStrategy'的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“lookupStrategy”的bean时出错,该bean在类路径资源中定义 [spring security.xml]:设置构造函数参数时无法解析对bean“aclCache”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建在类路径资源中定义了名为“aclCache”的bean时出错 [spring security.xml]:在设置构造函数参数时,无法创建[org.springframework.cache.ehcache.EhCacheFactoryBeana512c9c]类型的内部bean'org.springframework.cache.ehcache.EhCacheFactoryBean';嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.cache.ehcache.EhCacheFactoryBeana512c9c”的bean时出错,该bean在类路径资源中定义 [spring security.xml]:在设置bean属性“cacheManager”时,无法创建类型为[org.springframework.cache.ehcache.EhCacheManagerFactoryBean]的内部bean“org.springframework.cache.ehcache.EhCacheManagerFactoryBean68394e81”;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.cache.ehcache.EhCacheManagerFactoryBean68394e81”的bean时出错,该bean在类路径资源中定义 [spring-security.xml]:调用init方法失败;嵌套异常为net.sf.ehcache.CacheException:同一VM中已存在另一个未命名的CacheManager。请在配置中为每个CacheManager提供唯一名称,或执行以下操作之一:
有什么问题吗?谢谢

问题的原因是,使用默认设置时,不能让多个进程共享同一个EhCache。取自

CacheManager支持两种创建模式:singleton和instance

版本2.5之前的Ehcache版本允许任何数量的 将具有相同名称的CacheManagers配置为相同的资源 存在于JVM中。因此,每次新建CacheManager。。。叫做, 创建了一个新的CacheManager,而不考虑现有缓存 缓存管理器。正在调用CacheManager.create。。。返回现有的 配置名称为的singleton CacheManager(如果存在)或 基于传入的配置创建单例

Ehcache 2.5及更高版本不允许使用 在同一JVM中存在相同的名称。CacheManager构造函数 创建非单例缓存管理器可能违反此规则,导致 NullPointerException。如果您的代码可能会创建多个缓存管理器 在同一JVM中使用相同的名称,通过使用静态 CacheManager.create方法, 始终返回指定的或 默认未命名的CacheManager(如果该JVM中已存在)。如果 已命名或默认未命名的CacheManager不存在 CacheManager.create方法创建它

一种解决方案可以解决您的问题,但会减慢测试的执行速度,就是将@DirtiesContext添加到加载Spring配置的每个测试中。这将迫使Spring在运行每个测试类时重新创建所有bean,您将能够避开这个问题


在这些情况下,我更喜欢的解决方案是运行不使用其他配置文件测试缓存的测试,其中未配置缓存。这样,您就不需要@DirtiesContext,也不需要测试的执行时间(如果更好的话)

谢谢。但这通常是什么原因呢?