Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止使用特定弹簧外形运行测试_Java_Spring_Spring Boot_Testing_Spring Profiles - Fatal编程技术网

Java 防止使用特定弹簧外形运行测试

Java 防止使用特定弹簧外形运行测试,java,spring,spring-boot,testing,spring-profiles,Java,Spring,Spring Boot,Testing,Spring Profiles,我有一些在数据库中创建/删除条目的集成测试。问题是如果我使用 spring.profiles.active=prod 我的生产数据库被删除(当测试清除数据库时)。有没有办法阻止测试在这个特定的spring配置文件上运行 我看到了这条线索:但没有有用的答案 谢谢您的问题可能有多种解决方案 使用内存中的数据库,如for Sql和for no Sql来运行测试**首选方式 使用spring属性的克隆创建单独的属性文件。只需更改数据库属性/spring概要文件或其他内容。将此属性文件与测试类上的@te

我有一些在数据库中创建/删除条目的集成测试。问题是如果我使用

spring.profiles.active=prod
我的生产数据库被删除(当测试清除数据库时)。有没有办法阻止测试在这个特定的spring配置文件上运行

我看到了这条线索:但没有有用的答案


谢谢

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

  • 使用内存中的数据库,如for Sql和for no Sql来运行测试**首选方式
  • 使用spring属性的克隆创建单独的属性文件。只需更改数据库属性/spring概要文件或其他内容。将此属性文件与测试类上的@testpropertysource一起使用
  • 在测试上使用@dirtiescontext仅创建/删除受影响的行
  • 您可以做的另一件事是在数据库层中创建stud类来模拟操作
  • 您可以使用禁用测试。它并不直接依赖于spring概要文件,但您可以轻松地使用config file根据spring概要文件设置所需的值


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

    我能够解决以下问题:。解决方案并不完美,因为我需要验证prod配置文件在
    @之前和
    @之后
    中是否处于活动状态,但它确实有效。此外,
    System.getProperty(“spring.profiles.active”,”)<代码>实际上不起作用,但是
    Arrays.stream(environment.getActiveProfiles()).anyMatch(env->(env.equalsIgnoreCase(“prod”))``这有帮助吗@Aksapy,不幸的是,没有,这些答案都不能解决问题,尽管问题是相同的,如何在默认情况下禁用测试类。无论如何,谢谢你。我正在为不同的配置文件使用不同的数据库,默认情况下,测试不会在生产数据库上运行。这是一种防止可能分心的预防措施。我只是在测试环境中运行测试,但我想防止在
    spring.profiles.active=prod
    时意外运行
    mvn测试。我不知道如何使用@IfProfileValue。我试图执行
    @IfProfileValue(name=“spring.profiles.active”,value=“prod”)
    ,但当
    spring.profiles.active
    为“dev”时,它仍然运行。你能举个例子吗?