阻止来自 运行 特定 spring 配置文件的测试

Prevent tests from running with specific spring profile

我有一些集成测试 create/delete 我的数据库中的条目。问题是如果我 运行 使用

进行测试
spring.profiles.active=prod

我的生产数据库被删除(因为测试清除了数据库)。有什么方法可以防止 运行ning 对此特定的 spring 配置文件进行测试?

我看过这个帖子:How to prevent running tests when specific spring profile is active?但是没有有用的答案。

谢谢

您的问题可能有多种解决方案。

  1. 使用像 H2 for Sql and flapdoodle 这样的内存数据库来进行无-sql 的 运行 测试。 **首选方式
  2. 使用 spring 属性的克隆创建一个单独的属性文件。只需更改数据库 properties/spring 配置文件或其他内容。在测试 class.
  3. 上将此属性文件与 @testpropertysource 一起使用
  4. 在测试中使用@dirtiescontext 仅 create/delete 受影响的行。
  5. 您可以做的另一件事是创建 stud class您的数据库层以模拟操作。

您可以使用 @IfProfileValue annotation 来禁用测试。它不直接依赖于 spring 配置文件,但您可以轻松地使用配置文件根据 spring 配置文件设置所需的值。

话虽如此 - 运行 测试从生产数据库上的数据库(或任何其他数据库事务)中删除条目听起来风险很大。我支持@Sachin 上面的建议 - 运行 你在测试环境而不是生产环境上的测试

我能够根据以下评论解决问题:。该解决方案并不完美,因为我需要验证产品配置文件是否在 @BeforeAll and @AfterAll, but it does work. Furthermore, System.getProperty("spring.profiles.active", "");didn't actually work, butArrays.stream(environment.getActiveProfiles()).anyMatch(env -> (env.equalsIgnoreCase("prod")))``` 做了