@TestPropertySource-测试属性文件

时间:2018-10-17 15:30:08

标签: java spring junit null properties-file

我的Junit不能获取测试属性文件中设置的属性。 我没有收到错误,但是从属性文件返回的值为空

要测试的课程:

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
    }
}

支持组件-豆类和配置类:

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;
    }
}

配置类:

package com.abc.mysource.mypackage;
@Configuration
@ComponentScan(basePackages ="com.abc.mysource.mypackage.*")
@PropertySource("classpath:default.properties")
public class CommonConfig {}
src / main / resources下的

default.properties

myhelper.userType=PRIORITY

我的测试班:

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();
    }
}
在/ src / test / resources下定义的

default-test.properties:

myhelper.userType=COMMON

注意:

我将default-test.properties移至/ src / main / resources-commonProperties.getUserType()为空

我什至使用@TestPropertySource(properties = {“ myhelper.userType = COMMON”})。结果相同

注意2:

我在@TestPropertySource is not loading properties上尝试过该解决方案。

此解决方案要求我在src / test / java下创建一个名为CommonProperties的重复bean。但是@MockBean执行失败

@MockBean(name="commonProperties")
private CommonProperties commonProperties;

请不要标记重复项。

注意3: 我的是弹簧,不是弹簧靴子应用程序。

1 个答案:

答案 0 :(得分:0)

如果您不需要特定状态,则适用于MockBean。通常,此bean是“隔离的”,此bean的每个方法调用都将具有相同的结果。它是“隔离的”->使用@Value批注的服务将不适用于此bean。

您需要的是经过适当构造和初始化的“普通” bean。请使用@Autowired批注,并在需要时使用测试配置文件定义另一个bean。