我正在尝试测试用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
设置环境变量,这是该注释所期望的,但是没有用。
谢谢!
答案 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");
}
},