@TestPropertySource - 测试属性文件中的值未设置/设置为空
@TestPropertySource - Values not set / set as null from test properties file
我的 Junit 没有获取测试属性文件中设置的属性。
我没有收到任何错误,但是从属性文件返回的值是 null
CLASS待测试:
package com.abc.mysource.mypackage;
@Component
@ComponentScan
public class MyHelper {
@Autowired
@Qualifier("commonProperties")
private CommonProperties commonProperties;
public LocalDateTime method1ThatUsesCommonProperties(LocalDateTime startDateTime) throws Exception {
String customUserType = commonProperties.getUserType(); // Returns null if run as JUnit test
//Further processing
}
}
支持组件 - BEANS 和配置 CLASSES:
package com.abc.mysource.mypackage;
@Component
public class CommonProperties {
@Value("${myhelper.userType}")
private String userType;
public String getUserType() {
return userType;
}
public void setCalendarType(String userType) {
this.userType = userType;
}
}
配置CLASS:
package com.abc.mysource.mypackage;
@Configuration
@ComponentScan(basePackages ="com.abc.mysource.mypackage.*")
@PropertySource("classpath:default.properties")
public class CommonConfig {}
default.properties 在 src/main/resources
下
myhelper.userType=PRIORITY
我的测试CLASS:
package com.abc.mysource.mypackage.test;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes=MyHelper.class)
@TestPropertySource("classpath:default-test.properties")
@EnableConfigurationProperties
public class MyHelperTest {
@MockBean(name="commonProperties")
private CommonProperties commonProperties;
@Autowired
private MyHelper myHelper;
@Test
public void testMethod1ThatUsesCommonProperties() {
myHelper.method1ThatUsesCommonProperties();
}
}
default-test.properties定义在/src/test/resources下:
myhelper.userType=COMMON
注意:
我将 default-test.properties 移动到 /src/main/resources - commonProperties.getUserType() 为 null
我什至使用了@TestPropertySource(properties = {"myhelper.userType=COMMON"})。同样的结果
注 2:
我在 @TestPropertySource is not loading properties 上尝试了解决方案。
此解决方案要求我在 src/test/java 下创建一个名为 CommonProperties 的重复 bean。但是当我这样做时@MockBean 失败了
@MockBean(name="commonProperties")
private CommonProperties commonProperties;
请不要标记重复。
注 3:
我的是 spring,不是 spring 启动应用程序。
MockBeans 适用于不需要特定状态的情况。通常这个 bean 是 "isolated" 并且这个 bean 的每个方法调用都会有相同的结果。它是 "isolated" -> 使用@Value 注释的服务将不适用于此 bean。
您需要的是一个 "normal" bean,正确构造和初始化。请使用 @Autowired 注释并在需要时使用测试配置文件定义另一个 bean。
我的 Junit 没有获取测试属性文件中设置的属性。 我没有收到任何错误,但是从属性文件返回的值是 null
CLASS待测试:
package com.abc.mysource.mypackage;
@Component
@ComponentScan
public class MyHelper {
@Autowired
@Qualifier("commonProperties")
private CommonProperties commonProperties;
public LocalDateTime method1ThatUsesCommonProperties(LocalDateTime startDateTime) throws Exception {
String customUserType = commonProperties.getUserType(); // Returns null if run as JUnit test
//Further processing
}
}
支持组件 - BEANS 和配置 CLASSES:
package com.abc.mysource.mypackage;
@Component
public class CommonProperties {
@Value("${myhelper.userType}")
private String userType;
public String getUserType() {
return userType;
}
public void setCalendarType(String userType) {
this.userType = userType;
}
}
配置CLASS:
package com.abc.mysource.mypackage;
@Configuration
@ComponentScan(basePackages ="com.abc.mysource.mypackage.*")
@PropertySource("classpath:default.properties")
public class CommonConfig {}
default.properties 在 src/main/resources
下myhelper.userType=PRIORITY
我的测试CLASS:
package com.abc.mysource.mypackage.test;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes=MyHelper.class)
@TestPropertySource("classpath:default-test.properties")
@EnableConfigurationProperties
public class MyHelperTest {
@MockBean(name="commonProperties")
private CommonProperties commonProperties;
@Autowired
private MyHelper myHelper;
@Test
public void testMethod1ThatUsesCommonProperties() {
myHelper.method1ThatUsesCommonProperties();
}
}
default-test.properties定义在/src/test/resources下:
myhelper.userType=COMMON
注意:
我将 default-test.properties 移动到 /src/main/resources - commonProperties.getUserType() 为 null
我什至使用了@TestPropertySource(properties = {"myhelper.userType=COMMON"})。同样的结果
注 2:
我在 @TestPropertySource is not loading properties 上尝试了解决方案。
此解决方案要求我在 src/test/java 下创建一个名为 CommonProperties 的重复 bean。但是当我这样做时@MockBean 失败了
@MockBean(name="commonProperties")
private CommonProperties commonProperties;
请不要标记重复。
注 3: 我的是 spring,不是 spring 启动应用程序。
MockBeans 适用于不需要特定状态的情况。通常这个 bean 是 "isolated" 并且这个 bean 的每个方法调用都会有相同的结果。它是 "isolated" -> 使用@Value 注释的服务将不适用于此 bean。
您需要的是一个 "normal" bean,正确构造和初始化。请使用 @Autowired 注释并在需要时使用测试配置文件定义另一个 bean。