如何使用多种配置集成测试Spring Boot应用程序

时间:2015-06-04 05:53:30

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

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

@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 { ... }

2 个答案:

答案 0 :(得分:3)

似乎如果你分开基类,应用程序是单独配置的。

我最终做了什么:

@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
}

答案 1 :(得分:0)

您可以使用配置文件设置其他属性。可以使用注释@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