Spring 集成测试2(对spring管理的bean进行单元测试,借助于spring提供的Spring TestContext Framework ,2.5以后引入)
来源:互联网 发布:编程器是什么 编辑:程序博客网 时间:2024/04/27 02:36
是一个不依赖于测试框架(JUnit等)的测试环境,也是注解驱动的。(2.5版本后引入)
位于org.springframework.test.context包中。
@ContextConfiguration(locations = {"/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml", "/com/apress/prospring2/ch22/services/applicationContext-services.xml"})
定义在类上的注解,定义context。//或者使用classpath:的方式指定路径
@Autowired注解用于按类型加载bean。或者俺名称加载@Resource(name="...")
@TransactionConfiguration(transactionManager = "myTransactionManager")
定义在类上的注解,定义transaction。可以忽略,就会寻找默认的bean名称transactionManager。还可以设置defaultRollback。
@BeforeTransaction与@AfterTransaction
方法上的注解。事务前后所运行的方法。
支持类:
还可以使用JUnit测试环境,而TestContext测试代码还是一样的。
JUnit 3.8提供了:AbstractTransactionalJUnit38SpringContextTests和AbstractJUnit38SpringContextTests。
JUnit 4提供了:AbstractTransactionalJUnit4SpringContextTests和AbstractJUnit4SpringContextTests
在上面的注解的基础上还可以使用一下注解:
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指定。
demo:
位于org.springframework.test.context包中。
@ContextConfiguration(locations = {"/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml", "/com/apress/prospring2/ch22/services/applicationContext-services.xml"})
定义在类上的注解,定义context。//或者使用classpath:的方式指定路径
@Autowired注解用于按类型加载bean。或者俺名称加载@Resource(name="...")
@TransactionConfiguration(transactionManager = "myTransactionManager")
定义在类上的注解,定义transaction。可以忽略,就会寻找默认的bean名称transactionManager。还可以设置defaultRollback。
@BeforeTransaction与@AfterTransaction
方法上的注解。事务前后所运行的方法。
支持类:
还可以使用JUnit测试环境,而TestContext测试代码还是一样的。
JUnit 3.8提供了:AbstractTransactionalJUnit38SpringContextTests和AbstractJUnit38SpringContextTests。
JUnit 4提供了:AbstractTransactionalJUnit4SpringContextTests和AbstractJUnit4SpringContextTests
在上面的注解的基础上还可以使用一下注解:
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指定。
demo:
- @ContextConfiguration(locations = {"/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml","/com/apress/prospring2/ch22/services/applicationContext-services.xml"})
- @TransactionConfiguration(transactionManager = "myTransactionManager")
- public class DefaultUserServiceIntegrationTests extends AbstractTransactionalJUnit38SpringContextTests {
- protected UserService userService;
- public DefaultUserServiceIntegrationTests() {
- }
- @AfterTransaction
- public void checkDatabaseState() {
- assertEquals("No users should be saved in this test", 0, this.userService.findAllUsers().size());
- }
- @Repeat(10)
- @Timed(millis = 5000)
- @ExpectedException(IllegalArgumentException.class)
- public void testRegister() throws Exception {
- System.out.println("done");
- User user = new User();
- user.setUsername("jonhs");
- user.setPassword("hTy86dj");
- userService.register(user);
- assertNotNull("User not saved!", user.getId());
- User user2 = new User();
- user2.setUsername("jonhs");
- user2.setPassword("fGC467");
- userService.register(user2);
- }
- @ExpectedException(IllegalArgumentException.class)
- public void testRegisterIncorrectPassword() throws Exception {
- User user3 = new User();
- user3.setUsername("jandD");
- user3.setPassword("fgh85");
- userService.register(user3);
- }
- @Autowired(required = false)
- public void setUserService(UserService userService) {
- this.userService = userService;
- }
- @Autowired(required = false)
- public void setDataSource(DataSource dataSource) {
- super.setDataSource(dataSource);
- }
- }
- Spring 集成测试2(对spring管理的bean进行单元测试,借助于spring提供的Spring TestContext Framework ,2.5以后引入)
- Spring 集成测试1(对spring管理的bean进行单元测试,借助于spring提供的test case简化测试)
- Spring TestContext Framework对JUnit4和TestNG的集成支持详解
- Spring提供的单元测试
- 使用spring提供的测试功能结合JUnit4进行单元测试
- spring对bean的管理
- Spring对Bean的管理
- Spring 2.5 TestContext 测试框架
- Spring TestContext 测试框架
- Spring TestContext测试框架
- Spring(4)Spring的bean管理
- Spring TestContext
- spring testcontext
- spring的bean管理
- Spring的bean管理
- spring的bean管理
- Spring Bean的管理
- Java单元测试Junit(五)使用Spring TestContext测试Spring应用
- Entity Framework使用建模之Model First A
- c语言文件学习
- VC的makefile编写
- Oracle Form在工具栏增加按钮
- 构建 3D 网页新世界
- Spring 集成测试2(对spring管理的bean进行单元测试,借助于spring提供的Spring TestContext Framework ,2.5以后引入)
- ubuntu11.10安装tomcat7以及基本的目录结构和使用方法
- 如何查看oracle执行计划
- 用C++写入UTF-8格式的文件
- 向往的生活
- 三星很陶醉:爷会成为智能手机之王
- s3c2440 lcd
- Android笔记-ListView总结(多选框ListViiew,动态加载,多线程更新ListView中的进度条)
- jquery 阻止冒泡