Spring 集成测试2(对spring管理的bean进行单元测试,借助于spring提供的Spring TestContext Framework ,2.5以后引入)...

是一个不依赖于测试框架(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:
  1. @ContextConfiguration(locations = {"/com/apress/prospring2/ch22/dataaccess/applicationContext-dataaccess.xml","/com/apress/prospring2/ch22/services/applicationContext-services.xml"})
  2. @TransactionConfiguration(transactionManager ="myTransactionManager")
  3. publicclassDefaultUserServiceIntegrationTestsextendsAbstractTransactionalJUnit38SpringContextTests {
  4. protectedUserService userService;
  5. publicDefaultUserServiceIntegrationTests() {
  6. }
  7. @AfterTransaction
  8. publicvoidcheckDatabaseState() {
  9. assertEquals("No users should be saved in this test",0,this.userService.findAllUsers().size());
  10. }
  11. @Repeat(10)
  12. @Timed(millis =5000)
  13. @ExpectedException(IllegalArgumentException.class)
  14. publicvoidtestRegister()throwsException {
  15. System.out.println("done");
  16. User user =newUser();
  17. user.setUsername("jonhs");
  18. user.setPassword("hTy86dj");
  19. userService.register(user);
  20. assertNotNull("User not saved!", user.getId());
  21. User user2 =newUser();
  22. user2.setUsername("jonhs");
  23. user2.setPassword("fGC467");
  24. userService.register(user2);
  25. }
  26. @ExpectedException(IllegalArgumentException.class)
  27. publicvoidtestRegisterIncorrectPassword()throwsException {
  28. User user3 =newUser();
  29. user3.setUsername("jandD");
  30. user3.setPassword("fgh85");
  31. userService.register(user3);
  32. }
  33. @Autowired(required =false)
  34. publicvoidsetUserService(UserService userService) {
  35. this.userService = userService;
  36. }
  37. @Autowired(required =false)
  38. publicvoidsetDataSource(DataSource dataSource) {
  39. super.setDataSource(dataSource);
  40. }
  41. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值