我编写了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}}
我在做什么错了?
答案 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);
}