@IfProfileValue两个弹簧轮廓

时间:2015-12-01 13:16:36

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

你好我有一个springboot应用程序,有两个可能的弹簧配置文件,一个环境配置相关(dev,prod,staging ...)和一个模拟一些远程服务,让我们称之为remoteServiceMock。所以我的原始服务标有:

@Profile("!remoteServiceMock")

并且模拟bean:

@Profile("remoteServiceMock")

当我使用以下命令运行应用程序时,除了测试之外的所有内容都很好。

install -Dspring.profiles.active=dev,remoteServiceMock

install -Dspring.profiles.active=dev

因此加载了相应的bean。但是我遇到了测试问题。 我的测试班:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@Category({IntegrationTest.class})
@TestPropertySource("classpath:test.properties")
@IfProfileValue(name = "spring.profiles.active",
        values = "remoteServiceMock")
public class DeltaServiceMockTest {

    @Autowired
    private RemoteService remoteService;

    @Test
    public void shouldIntiService() throws Exception {
        assertNotNull(remoteService);
    }

    @Test
    public void shouldGetMockDelta() throws Exception {
        RemoteData remoteDate = remoteService.getData(new Date(), new Date());
        assertEquals(15,remoteDate.getActivity().size());
    }
}

仅当spring.profiles.active完全匹配时才执行测试的问题。因此,只有在我写下来时才会运行测试:

@IfProfileValue(name = "spring.profiles.active", = "dev,remoteServiceMock")

问题是:

1)是否可以为IfProfileValue写一些扩展名"包含" /"不包含"个人资料功能

2)对于我的目标,还有其他更好的解决方案吗? (所以我想模拟一个(在功能上有几个)远程服务并将我的应用程序部署到staging env)。

由于

1 个答案:

答案 0 :(得分:2)

您可能需要查看@ActiveProfiles功能并根据ActiveProfilesResolver (take a look at the bottom of this Spring docs section)对其进行自定义。