5.6 测试的改进
基于JUnit的集成测试现在可以使用JUnit规则执行而不是SpringJUnit4ClassRunner。这使得基于Spring的集成测试可以使用替代runner运行,比如JUnit的Parameterized或第三方的runner如MockitoJUnitRunner。参考Spring JUnit规则。
Spring MVC测试框架现在对HtmlUnit提供了一流的支持,包括集成Selenium的WebDriver,允许基于页面的web应用测试不再需要部署到一个Servlet容器上。参考15.6.2, HtmlUnit的集成。
- AopTestUtils是一个新的测试工具类,它允许开发者可以获取到底层的隐藏在一个或多个Spring代理类下的目标对象。参考14.2.1 通用测试工具类。
- ReflectionTestUtils现在支持为static字段设值和取值,包括常量。
- 通过@ActiveProfiles声明的bean定义配置文件的原始顺序现在保留了,这是为了使用一些案例,比如Spring Boot的 ConfigFileApplicationListener,它通过有效的名称来加载配置文件。
- @DirtiesContext现在支持新的模式BEFORE_METHOD, BEFORE_CLASS和BEFORE_EACH_TEST_METHOD用于在测试之前关闭 ApplicationContext——例如,在大型测试套件中的一些劣质的测试毁坏了对ApplicationContext的原始配置。
- @Commit这个新注解可以直接替代@Rollback(false)。
@Rollback现在可以用来配置类级别默认的回滚语义。
- 因此,@TransactionConfiguration现在过时了,并且会在后续版本中移除。
@Sql注解通过statements这个新的属性支持内联SQL语句的执行。
- 用于在测试期间缓存应用上下文的ContextCache现在是公共的API,它有默认的实现,可以替代自定义的缓存需求。
- DefaultTestContext, DefaultBootstrapContext和DefaultCacheAwareContextLoaderDelegate现在是support子包下的公共类,允许自定义扩展。
- TestContextBootstrappers现在负责创建TestContext。
- 在Spring MVC测试框架中,MvcResult的详细日志现在可以在DEBUG级别被打印,或者输出到自定义的OutputStream或Writer 中。参考MockMvcResultHanlder中的新方法log(), print(OutputStream)和print(Writer)。
- JDBC XML的命名空间支持一个新的属性database-name,位于<jdbc:embedded-database>中,允许开发者为嵌入的数据库设置不同的名字——例如,通过SpEl表达式或者被当前有效bean定义配置文件影响的属性文件占位符。
- 嵌入的数据库现在可以被自动赋予不同的名字,允许在同一测试套件不同的应用上下文中重复使用通用的测试数据库配置。参考 19.8.6 为嵌入的数据库生成不同的名字。
- MockHttpServletRequest和MockHttpServletResponse现在通过getDateHeader和setDateHeader方法提供了更好的支持用于格式化日期头。