Spring提供的测试类,可简化Spring的测试工作。
1、AbstractSpringContextTests
提供简化的统一构建context的方式。
-
publicclassDefaultUserServiceIntegrationTests2extendsAbstractSpringContextTests
{
-
-
protectedConfigurableApplicationContext
loadContext(Object o) {
-
String[]
paths =newString[]{
-
"classpath*:/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml",
-
"classpath*:/com/apress/prospring2/ch22/services/applicationContext-services.xml"
-
};
-
returnnewClassPathXmlApplicationContext(paths);
-
-
}
-
-
-
publicvoidtestRegister()throwsException
{
-
ApplicationContext
context = getContext("mytestcontext");
-
UserService
userService = (UserService) context.getBean("userService");
-
2、AbstractDependencyInjectionSpringContextTests
简化bean查找。
方式一:设置一个私有字段,会自动匹配类型
-
publicclassDefaultUserServiceIntegrationTests3extendsAbstractDependencyInjectionSpringContextTests
{
-
privateUserService
userService;
-
-
protectedString[]
getConfigLocations() {
-
String[]
paths =newString[]{
-
"classpath*:/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml",
-
"classpath*:/com/apress/prospring2/ch22/services/applicationContext-services.xml"
-
};
-
returnpaths;
-
}
-
-
publicvoidtestRegister()throwsException
{
-
userService.register(..);
方式二:如果类型有多个,那么可以匹配名称,需要设置为把private设置为protected,且名字为查找的名称,然后在构造方法中设置一个开关 setPopulateProtectedVariables(true)
-
publicclassDefaultUserServiceIntegrationTests3extendsAbstractDependencyInjectionSpringContextTests
{
-
protectedUserService
userService;
-
-
publicDefaultUserServiceIntegrationTests3()
{
-
setPopulateProtectedVariables(true);
-
}
-
-
protectedString[]
getConfigLocations() {
-
String[]
paths =newString[]{
-
"classpath*:/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml",
-
"classpath*:/com/apress/prospring2/ch22/services/applicationContext-services.xml"
-
};
-
returnpaths;
-
}
-
-
publicvoidtestRegister()throwsException
{
-
userService.register(...);
3、AbstractTransactionalSpringContextTests
不会让你影响到数据库,会自动在测试完成后回滚事务。或者通过setComplete()来额外指明提交事务。或者通过endTransaction()方法测试用例结束前结束事务。
当你需要测试添加、查询或删除数据中的行时,可以使用
AbstractTransactionalDataSourceSpringContextTests,他继承了AbstractTransactionalSpringContextTests,
增加了可以测试数据行的功能,事务在测试方法的最后回滚,因此数据库最后还是会保持一致。
4、AbstractAnnotationAwareTransactionalTests
继承了AbstractTransactionalDataSourceSpringContextTests,除了公开SimpleJdbcTemplate之外,还引入了Java 5的注解。
1.@Repeat
被注解的方法被会重复测试多次。
@Repeat(10)
2.@Timed
希望测试在制定的时间内完成,ms
@Timed(millis = 5000)
3.@Rollback
@Rollback(true)会在测试方法执行完毕后对事务进行回滚,如果设置为false,那么事务会被提交,这样就无需使用setComplete()方法,增加了代码的可读性。
4.@NotTransactional
表示测试方法没有事务,方法不会运行在事务上下文中。
5.@ExpectedException
表示我们期望测试方法会抛出异常,期望的异常类以参数的形式传进来。
@ExpectedException(IllegalArgumentException.class)就是测试中会抛出这个异常,不然就不对。
6.@DirtiesContext
标识测试方法会在执行过程中改变Spring Context,就是执行方法结束后,Spring context会从配置文件中重新构建。
AbstractDependencyInjectionSpringContextTests的setDirty()方法也可以实现。
7.@IfProfileValue和@ProfileValueSourceConfiguration
检查提供的名字(来自配置好的ProfileValueSource)的返回值,如果值匹配就会执行测试,否则会忽略掉测试。
默认ProfileValueSource是SystemProfileValueSource,否则使用@ProfileValueSourceConfiguration指定。
JNDI:
-
publicclassDefaultUserServiceIntegrationTests3extendsAbstractDependencyInjectionSpringContextTests
{
-
protectedUserService
userService;
-
-
publicstaticvoidbuildJndi()
{
-
try{
-
SimpleNamingContextBuilder
builder;
-
builder
= SimpleNamingContextBuilder.emptyActivatedContextBuilder();
-
-
String
connectionString ="jdbc:oracle:thin:@oracle.devcake.co.uk:1521:INTL";
-
builder.bind("java:comp/env/jdbc/prospring2/ch22",newDriverManagerDataSource(
-
"oracle.jdbc.driver.OracleDriver",
connectionString,"PROSPRING","x******6"));
-
}catch(NamingException
e) {
-
-
}
-
}
-
-
publicDefaultUserServiceIntegrationTests3()
{
-
buildJndi();
-
setPopulateProtectedVariables(true);
-
}
-
-
protectedString[]
getConfigLocations() {
-
String[]
paths =newString[]{
-
"classpath*:/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml",
-
"classpath*:/com/apress/prospring2/ch22/services/applicationContext-services.xml"
-
};
-
returnpaths;
-
}
注意:带有事务的Spring测试(继承AbstractTransactionalSpringContextTests的类)依赖于java.sql.DataSource和PlatformTransactionManager,所以只能为应用和测试维护对Spring context的单独的数据库访问。
分享到:
相关推荐
Spring中进行集成测试
spring单元测试包spring单元测试包spring单元测试包spring单元测试包spring单元测试包
如何将Spock模拟注入到Spring集成测试中该项目旨在用作示例指南,以说明如何将Spock与Spring(和Spring Boot)结合使用,并结合使用Spring配置和Spock模拟。 有时,您想使用整个Spring上下文进行更完整的集成测试。 ...
主要介绍了Spring Boot 单元测试和集成测试实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
该资源包含了spring整合单元测试Junit开发包spring-test-4.2.4.RELEASE.jar
这个是搭建与测试Spring的开发环境和编码剖析Spring 管理Bean的原理的代码,适合刚接触spring的人学习,如何搭建spring开发环境,以及了解spring是如何管理bean的。这个是由传智播客的老师讲的。
Spring bean 管理大全 全面的介绍springbean各种操作原理
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
详细讲解了spring中进行的集中测试。供spring学习者参考
NULL 博文链接:https://caerun.iteye.com/blog/1108226
主要介绍了spring cloud如何使用spring-test进行单元测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
spring自动扫描和管理Bean的示例
spring bean配置 运行环境:eclipse 构建工具:maven 不提供maven构建,maven用来解决jar包的依赖
spring动态向容器中添加bean和删除指定bean,不需要重启应用
spring运行过程中动态注册bean,代码实例
spring集成TestNG与Mockito框架单元测试方法,方便学习者能快速上手如何单测,对自己的代码能够有质量保证。
spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Spring Bean创建初始化流程