在Spring Boot中进行数据库测试之前,有条件地设置@Activeprofile

时间:2018-08-30 15:12:49

标签: java spring spring-boot

我有一个带有测试类的spring-boot应用程序,该类可对mongodb进行一些原始操作和服务测试。到目前为止,一切都在我的机器上完成(mongo在localhost上)。运行测试时,我将活动配置文件设置为“测试”以跳过服务中使用的某些身份验证方法。现在,我们正在建立一个生产环境,其中mongo在专用服务器上,并且我使用不同的application.properties文件设置了不同的配置文件。该部分工作正常,但是在托管环境上运行测试时,测试会失败,因为mongo不在本地主机上。我到处找了一些解决方案。

我的想法是在运行测试之前以某种方式检查活动配置文件是否为“ prod”,然后将活动配置文件设置为使用托管mongo的“ test-prod”之类的东西,以及活动配置文件是否为“默认或开发”将针对本地主机的活动配置文件设置为“测试”。

任何想法或解决方案将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以使用解析器基于例如环境变量来动态设置配置文件

import { unregister } from './registerServiceWorker';

// ...

unregister();

和配置文件解析器:

request-id

创建三个配置文件@ActiveProfiles(resolver = MyActiveProfileResolver.class) class MyTest { ... } public class MyActiveProfilesResolver implements ActiveProfilesResolver{ @Override public String[] resolve(Class<?> testClass) { Map<String, String> env = System.getenv(); String profile; if (env.hasKey("TEST_ENV")) { profile = env.get("TEST_ENV"); } else { profile = "local-test"; // it is more convenient to to have this as default to be used in dev env and override it on test env } return new String[]{profile}; } } test。解析程序应根据环境变量local-test返回prodtest

答案 1 :(得分:1)

也许您可以使用环境变量。而不是在application-test.yaml中提供url,而是定义一个变量:$ {MONGO_TEST_URL}

您将能够使用java -jar -DMONGO_TEST_URL = localhost或您要使用的任何地址来运行jar。

答案 2 :(得分:0)

不建议根据环境动态更改@ActiveProfile,因为它需要您添加额外的配置来找出它是哪个环境,然后根据该环境为测试设置@ActiveProfile。您所做的额外配置和工作将不是一个好的设计,并且是不必要的。如果唯一的麻烦是在本地运行测试,则建议您始终在计算机上进行开发时,始终将@ActiveProfile设置为test-prod,并在本地将其更改为test。请注意不要提交本地@ActiveProfile :)