Spring boot application-test.properties не инициализируется внутри тестируемого компонента

Я пишу тест для компонента, который принимает значения из application.properties.

В самом тесте значения правильно подобраны из application-test.properies. Я использовал @TestPropertySource(location = "classpath:application-test.properties")

Однако в тестируемом классе значения НЕ собираются и являются нулевыми.

Тест:

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(locations = "classpath:application-test.properties")
public class ArtifactAssociationHandlerTest {

private InputStream inputStreamMock;
private ArtifactEntity artifactMock;
private ArtifactDeliveriesRequestDto requestDto;
@Value("${sdc.be.endpoint}")
private String sdcBeEndpoint;
@Value("${sdc.be.protocol}")
private String sdcBeProtocol;
@Value("${sdc.be.external.user}")
private String sdcUser;
@Value("${sdc.be.external.password}")
private String sdcPassword;

@Mock
private RestTemplate restClientMock;

@Mock
private RestTemplateBuilder builder;

@InjectMocks
private ArtifactAssociationService associationService;

@Before
public void setUp() throws IOException {
    inputStreamMock = IOUtils.toInputStream("some test data for my input stream", "UTF-8");
    artifactMock = new ArtifactEntity(FILE_NAME, inputStreamMock);
    requestDto = new ArtifactDeliveriesRequestDto("POST",END_POINT);
    MockitoAnnotations.initMocks(this);
    associationService = Mockito.spy(new ArtifactAssociationService(builder));
    associationService.setRestClient(restClientMock);
}

Тестируемый компонент:

@Component("ArtifactAssociationHandler")
public class ArtifactAssociationService {

@Value("${sdc.be.endpoint}")
private String sdcBeEndpoint;
@Value("${sdc.be.protocol}")
private String sdcBeProtocol;
@Value("${sdc.be.external.user}")
private String sdcUser;
@Value("${sdc.be.external.password}")
private String sdcPassword;

private RestTemplate restClient;

@Autowired
public ArtifactAssociationService(RestTemplateBuilder builder) {
    this.restClient = builder.build();
}

 void setRestClient(RestTemplate restClient){
    this.restClient = restClient;
}

Как я могу правильно проверить это с application-test.properties?

1 ответ

Ваш setup Метод создает экземпляр ArtifactAssociationService, Это означает, что это не bean-компонент Spring и, следовательно, не выполняется никакого внедрения зависимостей. Это включает в себя введение в поля, отмеченные @Value,

Если вы хотите @Valueполя, в которые будут вставлены их значения, вам нужно будет сделать ArtifactAssociationService например, бин, например, создав его с помощью @Bean метод в @Configuration учебный класс.

Другие вопросы по тегам