【问题标题】:Spring Profiles in AbstractTransactionalJUnit4SpringContextTestsAbstractTransactionalJUnit4SpringContextTests 中的 Spring 配置文件
【发布时间】:2013-10-18 05:52:48
【问题描述】:

我们有一组集成测试,用于验证各种事情,包括我们的数据库在每个环境(Dev、Test、Qa 等)与我们的 JPA 映射和其他数据相关项相关的正常状态。

我们配置通过 Spring Profile 连接到的数据库和其他特定于环境的事物。这在我们的自动构建中非常有用,我们将环境变量“spring.profiles.active”设置为我们所处的任何环境,运行集成测试,并轻松定位配置错误以及其他有时可能被忽略的事情。

但是,我想要的是能够在集成测试套件中将 spring.profiles.default 属性设置为“dev”,这样当开发人员从 IDE 运行它们时,他们就不会收到抱怨的错误缺少配置文件。我们在 web.xml 中执行此操作以进行真正的部署,但我想知道的是如何连接到 AbstractTransactionalJUnit4SpringContextTests(或其他地方)来完成此操作?

【问题讨论】:

    标签: java spring spring-profiles


    【解决方案1】:

    没想到,您使用的是AbstractTransactionalJUnit4SpringContextTests,这意味着您可以访问ConfigurableApplicationContext 的实例。我相信你可以说:

    class BaseTest extends ATJ4SCT {
    
      @Autowired
      ConfigurableApplicationContext context;
    
      @Before
      public void setUp() {
        ConfigurableEnvironment env = context.getEnvironment();
        env.setDefaultProfiles("dev");
        // not sure but if necessary
        context.refresh();
    
      }
    
    }
    

    参考:ConfigurableEnvironment#setDefaultProfiles(String...)

    虽然主题不同但也值得一看this question

    【讨论】:

    • 是的....我考虑过 \\@before,但那必须在每个测试中,或者我必须引入另一层,在那里添加 \\@before,并从(我相信 \\@Before 会按照您在继承测试中的预期执行)。如果 AbstractTransactionalJUnit4SpringContextTests 在初始化上下文之前有某种钩子来设置东西,那将是“好的”。一种“嘿,这是你假装在 servlet 容器中的机会”设置。
    【解决方案2】:

    似乎不是这样做的一种方式,因此在 Intellij 中将 junit 的默认运行配置中的环境变量 spring.profiles.active 设置为“dev”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2016-10-02
      • 2020-05-07
      • 1970-01-01
      • 2022-12-04
      • 2011-08-08
      • 2021-04-18
      相关资源
      最近更新 更多