Dav*_*vid 9 spring-test spring-boot spring-boot-test
运行 spring boot 测试的推荐方法是什么,其中仅在上下文中配置了一个被测主题。
如果我用
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.profiles.active=test")
@ContextConfiguration(classes = MyTestBean.class)
Run Code Online (Sandbox Code Playgroud)
然后它似乎工作 - 测试通过,上下文快速启动并且似乎只包含我想要的 bean。但是,这似乎是对@ContextConfiguration(classes = MyTestBean.class)注释的错误使用。如果我理解正确,我引用的类应该是一个Configuration类,而不是一个常规的 spring 服务 bean 或组件。
那正确吗?或者这确实是实现这一目标的有效方法?我知道有更复杂的例子一样org.springframework.boot.test.autoconfigure.json.JsonTest,其使用@TypeExcludeFilters(JsonExcludeFilter.class)控制方面-但这似乎矫枉过正我的使用情况。我只想要我的一个 bean 的上下文。
我知道我可以在没有 spring 上下文测试的情况下将我正在测试的一个 bean 构建为 POJO,并删除上面的三个注释。但在我的精确用例中,我实际上依赖于通过设置中的设置应用于上下文的一些配置application-test.properties文件 - 这就是为什么我使用配置文件集将其作为 Spring Boot 测试的原因。从我的角度来看,这不是孤立于 spring 上下文配置的单个类的简单单元测试 - 该测试依赖于正在应用的某些配置(当前由 spring boot 应用程序属性提供)。我确实可以通过在 spring 上下文之外创建一个新实例来将组件作为 POJO 进行测试,我使用构造函数注入使提供必要的依赖项变得简单,但测试确实依赖于诸如日志级别之类的东西(测试实际上使正在生成的某些日志上的断言),这需要正确设置日志级别(目前正在通过logging.level.com.example=DEBUG设置 spring 上下文的属性文件完成)。
对于初学者,首先阅读文档(例如,此答案中下面链接的 JavaDoc)是推荐的最佳实践,因为它已经回答了您的问题。
如果我理解正确,我引用的类应该是一个
Configuration类,而不是一个常规的 spring 服务 bean 或组件。那正确吗?
不,这并不完全正确。
提供给@ContextConfiguration的类通常是 @Configuration类,但这不是必需的。
以下是JavaDoc@ContextConfiguration的摘录:
带注释的类
术语带注释的类可以指以下任何一个。
- 带有注释的类
@Configuration- A组分(即,一类注解为
@Component,@Service,@Repository等等)- 使用注解进行
javax.inject注解的符合 JSR-330 的类- 包含
@Bean-methods 的任何其他类
因此,您可以将任何“带注释的类”传递给@ContextConfiguration.
或者这确实是实现这一目标的有效方法?
实际上,这是实现该目标的有效方法;但是,加载ApplicationContext包含单个用户 bean 的 Bean也有点不寻常。
问候,
Sam(Spring TestContext Framework 的作者)
| 归档时间: |
|
| 查看次数: |
7071 次 |
| 最近记录: |