Почему @Value всегда имеет значение null при запуске unit-test? - PullRequest
0 голосов
/ 13 октября 2019

Я пишу приложение Spring Boot и придумываю идею службы условного планирования. Я решил заполнить все свойства от 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

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

reportService = new ReportService(); - вы сами создаете экземпляр класса, как Spring может узнать, что что-то нужно ввести?

Просто позвольте Spring создать экземпляр для вас (например, через @Autowired):

@Autowired
private ReportService reportService;
1 голос
/ 13 октября 2019

Попробуйте построить карту после инициализации переменных, а также используйте @Autowired, как https://stackoverflow.com/users/1121249/rkosegi упомянутый:

@PostConstruct
public Map<String, Boolean> getEnabledReports(){
    Map<String, Boolean> stringBooleanMap = new HashMap<>();
    stringBooleanMap.put(name, enabled);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...