Я пытаюсь протестировать свой класс конфигурации Spring, который помечен ConditionalOnCloudPlatform.
Вот очень упрощенный пример класса конфигурации (я не могу опубликовать свой фактический код):
@Configuration
@ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY)
public class CloudConfigurationExample {
@Bean
public MyBean myBean(MyProperties properties) {
return new MyBean(properties.getParam);
}
}
Чтобы проверить, я надеялся сделать это:
@RunWith(MockitoJUnitRunner.class)
public class CloudConfigurationExampleTest {
private CloudConfigurationExample cloudConfigurationExample;
private MyProperties myProperties;
@Before
public void setUp() {
myProperties = new MyProperies();
myProperties.setParam("test");
cloudConfigurationExample = new CloudConfigurationExample(myProperties);
}
@Test
public void test() {
MyBean myBean = cloudConfigurationExample.myBean();
// do asserts etc.
}
}
У меня проблема в том, что ConditionalOnCloudPlatform активирован и ожидает наличия действительного облачного соединителя. В результате получаю No suitable cloud connector found.
Кто-нибудь знает правильный способ заставить Junit игнорировать эту аннотацию? Я попытался установить переменную среды с помощью VCAP_SERVICES, чего и ожидает эта аннотация, но это не сработало.
Спасибо!




ConditionalOnCloudPlatform gets activated if environment contains properties VCAP_APPLICATION and VCAP_SERVICES
Есть разные способы решить эту проблему,
Во-первых, убедитесь, что никакие свойства, содержащие вышеуказанные префиксы, не передаются.
Во-вторых, проверьте наличие облачного профиля @Profile("cloud") или игнорируйте этот класс во время теста @Profile("!test") и многими другими способами.
фрагмент кода:
CLOUD_FOUNDRY {
@Override
public boolean isActive(Environment environment) {
return environment.containsProperty("VCAP_APPLICATION")
|| environment.containsProperty("VCAP_SERVICES");
}
},