【问题标题】:Spring profiles on integration tests class集成测试类上的 Spring 配置文件
【发布时间】:2015-09-30 06:33:10
【问题描述】:

我们有由 java 测试类运行的 selenium 测试。

在本地环境中一切正常,但我想在 jenkins 上运行时关闭这些测试。

所以我使用:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebIntegrationTest("server.port=1234")
@Profile("!jenkins")
@ActiveProfiles("integrationtests")
public class LoginAndEditProfileSeleniumTest {
...

什么有效: running mvn clean test 在本地运行所有测试,integrationtests 配置文件处于活动状态。我不想传递任何额外的参数。

我想要实现的目标: 运行mvn clean test -Dspring.profiles.active=jenkins 关闭此测试。

我可以以某种方式合并通过参数传递的配置文件、ActiveProfile 注释并考虑配置文件注释吗? :)

//更新: 可以使用扩展 ActiveProfilesResolver 的类:

public class ActiveProfileResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> testClass) {

    final String profileFromConsole = System.getProperty("spring.profiles.active");
    List<String> activeProfiles = new ArrayList<>();
    activeProfiles.add("integrationtests");
    if("jenkins".contains(profileFromConsole)){
        activeProfiles.add("jenkins");
    }
    return activeProfiles.toArray(new String[activeProfiles.size()]);
}
}

但它似乎无论如何都不与@Profile合作(jenkins配置文件处于活动状态但测试仍在运行)。

【问题讨论】:

    标签: spring spring-test


    【解决方案1】:

    @Profile 对测试类有影响。因此,您应该简单地删除该注释。

    如果您想启用仅当给定系统属性具有特定值时才启用测试类,您可以使用@IfProfileValue

    但是,在您的场景中,如果给定的系统属性具有特定值(即,如果 spring.profiles.active 包含 jenkins),您希望禁用测试类。

    除了实现自定义ActiveProfileResolver,更优雅的解决方案是使用JUnit 假设,如果假设失败,则忽略整个测试类.

    这应该很适合你:

    import static org.junit.Assume.*;
    
    // ...
    
    @BeforeClass
    public static void disableTestsOnCiServer() {
        String profilesFromConsole = System.getProperty("spring.profiles.active", "");
        assumeFalse(profilesFromConsole.contains("jenkins"));
    }
    

    问候,

    Sam(Spring TestContext 框架的作者

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2019-02-25
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多