2015-11-06 6 views
0

У меня тест как этогоSet Spring Unit Test Profile От -D переменных

RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { AppConfig.class, DevConfig.class, ProdConfig.class}) 
@ActiveProfiles({"prod", "dev"}) 
public class MyTest { 
........ 
} 

AppConfig является основной конфигурацией для моего приложения

есть два класса конфигурации создана только сюда мои модульные тесты в нагружает DEV конфигурации класса test_dev.properties из моего SRC/тест/ресурс/...

@Configuration 
@Profile("dev") 
@PropertySource("classpath:test_dev.properties") 
public class DevConfig { 

} 

в ProdConfig грузы класса prod.properties

@Configuration 
@Profile("prod") 
@PropertySource("classpath:test_prod.properties") 
public class ProdConfig { 

} 

Я хочу, чтобы легко переключаться между прод и разработчика, изменив значение в @ActiveProfiles

Но я хочу иметь возможность переключаться тестовой среды как

mvn -Dspring.profiles.active=dev or prod install 

Я попытался

@ActiveProfiles({"prod", "dev"}) 
    then 
    mvn -Dspring.profiles.active=dev or prod install 

Кажется, что продукт всегда подбирается

Я видел решения, как

@Test 
    public void transferTenDollars() throws InsufficientFundsException { 
     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
     ctx.getEnvironment().setActiveProfiles("dev"); 
     ctx.register(TransferServiceConfig.class, StandaloneDataConfig.class, JndiDataConfig.class); 
     ctx.refresh(); 

     // proceed with assertions as above ... 
    } 

, но это бы потеряли весь смысл использования @ContextConfiguration аннотации.

ответ

1

Я думаю, что переключатель

-Dspring.profiles.active=dev 

или даже в качестве переменной среды

SPRING_PROFILES_ACTIVE=dev mvn install 
+0

вы правы. Но удаление @ActiveProfiles ({«prod»}) было ключом к решению моей проблемы – user5324782

+0

причина удалить @ActiveProfiles ({"prod", "dev"}) решает проблему, потому что вместо указания активного профиля из вашего кода, вы хотите передать его из командной строки env var. поэтому не нужно делать @ActiveProfiles – user5324782