2014-09-26 1 views
1

Я поместил аннотацию @IntegrationTest на каждый тест, и иногда я использую его для добавления свойств в среду. При совместном выполнении всех тестов кажется, что используются только свойства, встречающиеся в первой аннотации @IntegrationTest, поэтому некоторые тесты терпят неудачу. Есть ли способ заставить перезагрузить эти свойства?Свойства @IntegrationTest в наборе не перезагружены

Это пример моего использования:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes=TestApplication.class) 
@WebAppConfiguration 
@IntegrationTest("some.property=true") 
public class SomeIntegrationTest { 
+0

Как вы определяете, какие свойства '@ IntegrationTest' используются, т.е. какой класс тестирования загружен первым? – Paul

ответ

3

Испытания Spring Boot При тестировании запускаются только один раз для всех тестов, что является хорошей вещью в отношении производительности теста. Если вы хотите, чтобы запустить другое приложение с другим набором свойств, вы должны написать еще один Spring класс приложения загрузки, как это:

@Configuration 
@EnableAutoConfiguration 
public class MetricsTestApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(MetricsTestApplication.class, args); 
    } 

} 

В интеграционном тесте, вы ссылаетесь, что другой класс. Кроме того, вы должны установить другой порт, чем первое приложение, и вы можете добавить свойства, которые отличаются от свойств первого применения:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes=MetricsTestApplication.class) 
@WebAppConfiguration 
@IntegrationTest({"server.port=8091","batch.metrics.enabled=true"}) 

Нашего MetricsTestApplication с другим набором свойств теперь запускаются под портом 8091.

0

Согласно документации API @IntegrationTest аннотаций "signifying that the tests are integration tests (and therefore require an application to startup "fully loaded" and listening on its normal ports)".

Если вы хотите использовать перегружаемые свойства, вы должны использовать EnvironmentTestUtils.

например.

@Autowired 
Environment env; 

@Autowired 
ConfigurableApplicationContext ctx; 

@Before 
public void before() { 
    EnvironmentTestUtils.addEnvironment(ctx, "test.value:myValue"); 
} 

@Test 
public void testGreeting() { 
    assertThat(env.getProperty("test.value"), comparesEqualTo("myValue")); 
} 
+0

Выше всего решение? Я попытался добавить это, но, похоже, он вообще не добавляет свойства. Есть ли аннотация на уровне класса, которая должна быть запущена? –

Смежные вопросы