【问题标题】:How to integration test Spring Boot application with multiple configurations如何使用多种配置集成测试 Spring Boot 应用程序
【发布时间】:2015-06-04 05:53:30
【问题描述】:

我们目前有一个集成测试基类

@SpringApplicationConfiguration(classes = { MyApp.class, TestConfig.class })
@IntegrationTest({
  "foo:bar",
  "baz:qux"
})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public abstract class BaseIntegrationTest {
   ...
}

我们想要为单个测试类添加一个参数到@IntegrationTest。这在单独运行测试时效果很好,但是在运行所有测试时,不会添加参数。

有没有办法解决这个问题?例如,为单个测试类启动一个新应用程序?

基本上,我想做的是:

public class TestOne extends BaseIntegrationTest { ... }

@IntegrationTest({
  "foo:zorblax"
})
public class TestTwo extends BaseIntegrationTest { ... }

【问题讨论】:

    标签: spring-boot integration-testing spring-test


    【解决方案1】:

    好像把基类分开的话,应用是分开配置的。

    我最终做了什么:

    @WebAppConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    public abstract class BaseIntegrationTest {
      // Common methods and fields,
      // @Before, @PostConstruct, etc.
    }
    
    @SpringApplicationConfiguration( classes = {...} )
    @IntegrationTest({
      "foo:bar",
      "bar:baz"
    })
    public abstract class WithParamsOne extends BaseIntegrationTest {
      // empty
    }
    
    @SpringApplicationConfiguration( classes = { /* Different */ } )
    @IntegrationTest({
      "foo:zorblax"
    })
    public abstract class WithParamsTwo extends BaseIntegrationTest {
      // empty
    }
    
    public class ActualTest extends WithParamsOne {
      // @Test
    }
    
    public class SecondActualTest extends WithParamsTwo {
      // @Test
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用配置文件来设置其他属性。可以使用注释@ActiveProfiles 激活它们。您还可以在一个测试中组合配置文件。

      根据前面的答案,您可以创建配置文件“param_one”和“param_two”。可以通过配置文件特定的属性文件设置属性:application-param_one.properties 和 application-param_two.properties

      @SpringApplicationConfiguration(...)
      @WebAppConfiguration
      @RunWith(SpringJUnit4ClassRunner.class)
      public abstract class BaseIntegrationTest {
      }
      
      @ActiveProfiles("param_one")
      public class FirstParamTest extends BaseIntegrationTest {
      }
      
      @ActiveProfiles("param_two")
      public class SecondParamTest extends BaseIntegrationTest {
      }
      
      @ActiveProfiles({ "param_one", "param_two" })
      public class AllParamsTest extends BaseIntegrationTest {
      }
      

      另请参阅Reference Guide

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2015-06-14
        • 2016-04-25
        • 1970-01-01
        • 2019-02-06
        相关资源
        最近更新 更多