Spring 5中的SpringJUnitConfig和SpringJUnitWebConfig注解

2023/05/10

1. 简介

在这篇简短的文章中,我们将了解Spring 5中可用的新@SpringJUnitConfig和@SpringJUnitWebConfig注解。

这些注解是JUnit 5和Spring 5注解的组合,它们使测试创建更加容易和快速。

2. @SpringJUnitConfig

@SpringJUnitConfig结合了这两个注解:

  • 来自JUnit 5的@ExtendWith(SpringExtension.class)使用SpringExtension类运行测试
  • 来自Spring Testing的@ContextConfiguration用于加载Spring上下文

让我们创建一个测试并在实践中使用这个注解:

@SpringJUnitConfig(SpringJUnitConfigIntegrationTest.Config.class)
public class SpringJUnitConfigIntegrationTest {

    @Configuration
    static class Config {}
}

请注意,与@ContextConfiguration相比,配置类是使用value属性声明的。但是,应该使用locations属性指定资源位置。

我们现在可以验证Spring上下文是否真的加载了:

@Autowired
private ApplicationContext applicationContext;

@Test
void givenAppContext_WhenInjected_ThenItShouldNotBeNull() {
    assertNotNull(applicationContext);
}

最后,这里我们有@SpringJUnitConfig(SpringJUnitConfigTest.Config.class)的等效代码:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SpringJUnitConfigTest.Config.class)

3. @SpringJUnitWebConfig

@SpringJUnitWebConfig结合了与@SpringJUnitConfig相同的注解加上Spring测试中的@WebAppConfiguration-加载WebApplicationContext。

让我们看看这个注解是如何工作的:

@SpringJUnitWebConfig(SpringJUnitWebConfigIntegrationTest.Config.class)
public class SpringJUnitWebConfigIntegrationTest {

    @Configuration
    static class Config {
    }
}

与@SpringJUnitConfig一样,配置类位于value属性中,任何资源都使用locations属性指定。

此外,@WebAppConfiguration的value属性现在应该使用resourcePath属性指定。默认情况下,此属性设置为“src/main/webapp”

现在让我们验证WebApplicationContext是否真的加载了:

@Autowired
private WebApplicationContext webAppContext;

@Test
void givenWebAppContext_WhenInjected_ThenItShouldNotBeNull() {
    assertNotNull(webAppContext);
}

同样,这里我们有不使用@SpringJUnitWebConfig的等效代码:

@ExtendWith(SpringExtension.class)
@WebAppConfiguration
@ContextConfiguration(classes = SpringJUnitWebConfigIntegrationTest.Config.class)

4. 总结

在这个简短的教程中,我们展示了如何使用Spring 5中新引入的@SpringJUnitConfig和@SpringJUnitWebConfig注解。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章