使用ConditionalOnCloudPlatform批注测试弹簧配置

时间:2019-03-06 20:21:02

标签: java spring unit-testing spring-boot junit

我正在尝试测试用ConditionalOnCloudPlatform注释的Spring配置类。

这是配置类的一个非常简化的示例(我无法发布我的实际代码):

@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设置环境变量,这是该注释所期望的,但是没有用。

谢谢!

1 个答案:

答案 0 :(得分:0)

  如果环境包含属性 VCAP_APPLICATION VCAP_SERVICES

,则会激活

ConditionalOnCloudPlatform

有多种方法可以解决此问题,

首先,确保没有传递包含上述前缀的属性。
其次,检查云配置文件@Profile("cloud")或在测试@Profile("!test")中忽略此类,并采用其他方法。

代码段:

CLOUD_FOUNDRY {

        @Override
        public boolean isActive(Environment environment) {
            return environment.containsProperty("VCAP_APPLICATION")
                    || environment.containsProperty("VCAP_SERVICES");
        }

    },