为什么在运行单元测试时@Value始终为null?

时间:2019-10-13 12:39:01

标签: java spring-boot unit-testing

我编写了application-test.yml应用程序,并提出了条件调度服务的想法。 我决定通过@Value填充HashMap中的所有属性,并将其放入null中。

我不明白为什么在进行单元测试时总是HashMap,而不管它是在@Value还是ReportService.java填充的属性中。

@Component public class ReportService { @Value("${reports.name}") private String name; @Value("${reports.enabled}") private Boolean enabled; private final Map<String, Boolean> enabledReports = new HashMap<String, Boolean>() {{ put(name, enabled); }}; boolean isEnabled(String reportName) { System.out.println(enabledReports.keySet() + " : " + enabledReports.values()); System.out.println(name); return false; } }

ReportServiceTest.java

@SpringBootTest @SpringBootConfiguration @RunWith(SpringRunner.class) @TestPropertySource(locations="classpath:application-test.yml") @EnableAutoConfiguration public class ReportServiceTest { private ReportService reportService = new ReportService(); @Test public void test() { reportService.isEnabled("reportName"); } }

application-test.yml

reports: name: "report" enabled: false

{{1}}

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

reportService = new ReportService();-您正在创建类的实例,Spring如何才能知道需要注入某些东西?

只需让Spring为您创建实例(例如,通过@Autowired):

@Autowired
private ReportService reportService;

答案 1 :(得分:0)

在变量初始化后尝试构建地图,并像使用https://stackoverflow.com/users/1121249/rkosegi一样使用@Autowired:

@PostConstruct
public Map<String, Boolean> getEnabledReports(){
    Map<String, Boolean> stringBooleanMap = new HashMap<>();
    stringBooleanMap.put(name, enabled);
}