У меня тест как этого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 аннотации.
вы правы. Но удаление @ActiveProfiles ({«prod»}) было ключом к решению моей проблемы – user5324782
причина удалить @ActiveProfiles ({"prod", "dev"}) решает проблему, потому что вместо указания активного профиля из вашего кода, вы хотите передать его из командной строки env var. поэтому не нужно делать @ActiveProfiles – user5324782