我正在为我的项目进行测试自动化。
当我初次介绍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
如何解决以上问题?我的考试出了什么问题?