Причина, по которой значение здесь не вводится, заключается в том, что вы не предоставляете конфигурацию для своего тестового класса. Весна просто не знает, как создать свой боб.
Итак, как вы упомянули, вы должны аннотировать тестовый класс @ContextConfiguration
. Если вы не хотите создавать весь контекст со всеми bean-компонентами, вы можете создать тестовую конфигурацию и предоставить туда только необходимые bean-компоненты.
@Configuration //can be as well annotated with @TestConfiguration
@ComponentScan("package.to.scan")
public class TestConfiguration {
}
А теперь предоставьте этот класс для вашего теста
@RunWith(SpringRunner.class)
@TestPropertySource("classpath:application-test.properties")
@ContextConfiguration(classes = TestConfiguration.class)
public class ReportImplTest {
........
}
Но есть еще одна вещь. Предполагая, что у вас есть метод @Before
, который выполняет MockitAnnotations.initMocks(this);
, у вас все еще есть тестируемый объект, объявленный только с @InjectMocks
. Что это значит? Это означает, что если вы не инициализируете этот объект самостоятельно, mockito позаботится о нем и инициализируется с использованием доступного конструктора, и в этом случае Spring не будет внедрять аннотированное поле @Value
. Что вам нужно сделать, так это пометить тестируемый объект с помощью @Autowired
, чтобы Spring инициализировал его, прежде чем mockito попытается позаботиться о нем:
@InjectMocks
@Autowired
private ReportImplTest underTest;