@SpyBean在Spring上下文中破坏属性解析

时间:2018-10-24 16:20:27

标签: spring

我正在为我的项目进行测试自动化。

当我初次介绍add()时,我发现我的测试失败了并且很惨

@SpyBean

我正在编写端到端测试,以提取整个应用程序及其所需要的全部内容(确定初始化程序的数量),就隔离性和性能对我的行为承担全部责任。我已经在较小的测试中测试了单个组件,但是现在该连接所有东西并使野兽工作了。

在上下文文件中,我为bean使用了许多@RunWith(MyCustomTestRunnerExtendingSpringJunit4TestRunnerAndNotDoingEsothericStuffThatMayBreak.class) @ContextConfiguration(initializers = {// LicenseInitializer.class,// PropertySourceInitializer.class,// InstanceIdInitializer.class,// DataSourceProfileInitializer.class,// AuthenticationProfileInitializer.class,// ClusterInitializer.class,// CachingInitializer.class,// ExtensibleContextInitializer.class// }, locations = {// "classpath*:META-INF/context/*-context.xml",// "classpath*:META-INF/context/security/*-context.xml",// "classpath*:META-INF/context/web/*-context.xml",// "classpath*:META-INF/context/test/*-context.xml",// }) @WebAppConfiguration("/webapp") @EnableWebMvc @EnableWebSecurity public class MyEndToEndMockMvcTest { @SpyBean / @Autowired private ApplicationContext applicationContext; } 表达式。例如我偶然发现的地方

${}

以上是我用来验证生产用户身份的Spring Security密码编码器。

问题

当我<bean class="${password.passwordEncoder:org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder}" id="passwordEncoder" /> 进行@Autowire测试时,我无法使用Mockito的间谍功能

当我ApplicationContext @SpyBean为了检查某个事件是否已作为测试的后置条件的一部分发布时,在PropertyResolver为(从调试日志中加载)

ApplicationContext

似乎java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [${password.passwordEncoder:org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder}] for bean with name 'passwordEncoder' defined in file [....xml]; nested exception is java.lang.ClassNotFoundException: ${password.passwordEncoder:org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder} 有不希望的副作用,使SpyBean不使用属性解析器,而是尝试连接以XML编写的bean。我没想到会这样。我只是希望ApplicationContext会简单地将注入的@SpyBean包装到ApplicationContext

如何解决以上问题?我的考试出了什么问题?

0 个答案:

没有答案