Java 单元测试时如何设置全局环境变量
我试图创建一个单元测试,但是,每当我运行它时,我都会在变量上遇到Java 单元测试时如何设置全局环境变量,java,spring,unit-testing,junit,Java,Spring,Unit Testing,Junit,我试图创建一个单元测试,但是,每当我运行它时,我都会在变量上遇到null值。调试此问题指向我的环境变量未在我的单元测试中全局使用。作为一个类我正在测试调用另一个类,然后从环境变量引用它的值。如何在IntelliJ中使用全局环境变量 我已经在测试配置中添加了这样的环境变量, 然而,这似乎并没有在整个项目中使用。因此,调用此环境变量的类将返回null。如何使单元测试及其调用的类使用全局声明的环境变量?。蒂亚。下面是我的代码片段,介绍了如何在类中使用环境变量 @Value("${fintech.cl
null
值。调试此问题指向我的环境变量未在我的单元测试中全局使用。作为一个类
我正在测试调用另一个类,然后从环境变量引用它的值。如何在IntelliJ中使用全局环境变量
我已经在测试配置中添加了这样的环境变量,
然而,这似乎并没有在整个项目中使用。因此,调用此环境变量的类将返回null。如何使单元测试及其调用的类使用全局声明的环境变量?。蒂亚。下面是我的代码片段,介绍了如何在类中使用环境变量
@Value("${fintech.clientid}")
private String clientId;
@Value("${fintech.secret}")
private String clientSecret;
@Value("${digifi-host}")
private String fintechHost;
@Value("${fintech-digifi-login-endpoint}")
private String loginUrl;
@Value("${fintech-single-session-endpoint}")
private String singleSessionUrl;
它从类中调用存储在my application.properties文件中的值。从application.properties文件中,它尝试在运行时声明的环境变量中查找正确的值
So from Java Class > application.properties file/config > Runtime Environment Variables
下面是调试测试时带有空值的变量的屏幕截图。如您所见,所有的值都是null,这意味着它没有加载我在单元测试中输入的环境变量。在另一个测试用例中,我有一个临时修复(正如我在这里的答案中所说的),它们被填充,因此正确地加载了环境变量,但是在我的许多其他测试用例中,像这样的一个,它没有
附言:
我已经在stackoverflow中找到了相关文章,但它们都是特定于测试类的,并且使用surefire插件或设置环境变量,或者通过pom,但是我不需要它,因为我们需要在运行时使用环境变量,因为变量的值应该是隐藏的,并且在代码上不可见。我只需要整个项目在进行单元测试时使用一个全局环境变量。很像我的项目在正常运行时如何使用我在IDE中设置的环境变量
仅供参考。我已经做过了
A
@ClassRule
public final static EnvironmentVariables EnvironmentVariables=new EnvironmentVariables().set(“property1”、“value1”);
B
@ContextConfiguration(locations=“classpath:application.properties”)
公共类登录服务测试{
...
}
C
org.apache.maven.plugins
maven surefire插件
8082
D
@TestPropertySource(属性={“property1=value1”、“property2=value2”,})
公共类登录服务测试{
...
}
E
公共类登录服务测试{
静止的{
System.setProperty(“property1”、“value1”);
System.setProperty(“property2”、“value2”);
...
}
更新:
这个解决方案对我所有的测试都有效
然后
运行>编辑配置>模板(在侧菜单中)>JUnit
@Value("${fintech.clientid}")
public void getClientId(String tempClientId) {
clientId = tempClientId;
}
private String clientId;
@Value("${fintech.secret}")
public void getClientSecret(String tempClientSecret) {
clientSecret=tempClientSecret;
}
private String clientSecret;
@Value("${digifi-host}")
public void getDigifiHost(String tempDigifiHost) {
digifiHost=tempDigifiHost;
}
private String digifiHost;
你能给我们展示一下你的spring配置类,它将环境变量映射到你的java代码吗?你这里的代码一点帮助都没有。从你这里的代码来看,你正确地使用了intellij,所以问题在于你的代码和你如何使用这些变量。嗨,我更新了这个问题。请检查它是否正确。我对你的answ发表了评论呃,而不是前面的问题,对不起。您能给我们看一下您的带有环境变量映射的属性文件吗?还有,您的LoginClient上的注释?Thx。您好@SoftwareEngineer,谢谢您的回复。我找到了一个修复方案,并已将其发布在下面的答案上。:)
@Value("${fintech.clientid}")
private String clientId;
@Value("${fintech.secret}")
private String clientSecret;
@Value("${digifi-host}")
private String digifiHost;
@Value("${fintech.clientid}")
public void getClientId(String tempClientId) {
clientId = tempClientId;
}
private String clientId;
@Value("${fintech.secret}")
public void getClientSecret(String tempClientSecret) {
clientSecret=tempClientSecret;
}
private String clientSecret;
@Value("${digifi-host}")
public void getDigifiHost(String tempDigifiHost) {
digifiHost=tempDigifiHost;
}
private String digifiHost;