繁体   English   中英

在春季和非春季测试之间共享属性

[英]sharing properties between spring and non-spring tests

我的大多数数据库测试都不使用Spring,因为这样可以更快地启动。 但是我还想运行实际运行整个Spring Boot应用程序的冒烟测试。

我想将数据库连接参数放在一个地方。 为此,我认为我有2种选择:

  1. 在非Spring测试中模拟/重用Spring的属性加载
  2. 将我在运行时中计算出的属性(不带常量注释)注入到冒烟测试中的Spring配置中

知道如何实现这些目标吗? 也许有一些更简单的方法?

您可以将数据库连接参数导出为与application.properties属性完全一样命名的系统属性。 由于Spring Boot处理外部化配置的方式,这些值将覆盖Spring配置中的属性(或YAML,无论使用哪种)文件中的值,然后您只需在非Spring测试中使用系统属性即可。

尽管我建议将那些数据库测试也作为Spring套件的一部分-实际上,只有执行单个测试时,您才可以提高速度。 除非您具有@DirtiesContext测试或使用其他@ActiveProfiles批注的测试,否则Spring将缓存应用程序上下文,并且每个整个测试套件仅对其初始化一次。

这是官方文件的报价:

Spring TestContext Framework提供了Spring ApplicationContexts和WebApplicationContexts的一致加载以及这些上下文的缓存。 对加载的上下文的缓存的支持很重要,因为启动时间可能会成为一个问题-不是因为Spring本身的开销,而是因为Spring容器实例化的对象需要时间才能实例化。 例如,具有50到100个Hibernate映射文件的项目可能需要10到20秒来加载映射文件,并且在每个测试夹具中运行每个测试之前要承担该费用,这会导致整体测试运行速度变慢,从而降低了开发人员的工作效率。

默认情况下,加载后,已配置的ApplicationContext将重新用于每个测试。 因此,每个测试套件仅产生一次安装成本,并且随后的测试执行要快得多。 在这种情况下,术语“测试套件”表示所有测试都在同一JVM中运行-例如,所有测试都从给定项目或模块的Ant,Maven或Gradle构建运行。

您可以将数据库连接属性存储在专用的Java db.properties文件中,可以为标准测试和Spring Boot测试加载db.properties文件。

然后,您可以指示春天引导装载db.properties指定自定义除了你的标准春季启动应用程序属性文件spring.config.location

Spring Boot参考手册的Application属性文件部分提供了您需要的所有详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM