Использование свойств @Value в тестовых случаях mockito - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть файл yml, в котором я храню свои переменные.Я обращаюсь к этим переменным в моей программе с помощью аннотации @Value.Проблема возникает, когда я пишу фиктивные тестовые случаи для таких методов, я получаю исключение нулевого указателя в моем методе теста.Я не уверен, где я иду не так.Я использую @TestPropertySource прямо сейчас.Мне нужен правильный способ сделать это.

Вот то, что я пробовал до сих пор.Мой файл yml выглядит следующим образом со многими свойствами:

car:
services:
  clientId: abcde
  authTokenUrl: ....
  .....

public Class CarExecution(){
@Value("${car.services.clientId}")
private String clientId;

@Value("${car.services.authTokenUrl}")
private String authTokenUrl;
public String getAccessToken() {
HttpHeaders headers = new HttpHeaders();
headers.set(CONTENT_TYPE, "application/x-www-form-urlencoded");
headers.set(ACCEPT, APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>("grant_type=password" + "&client_id=" + clientId ,headers);
ResponseEntity<Access> response = restTemplate.exchange(authTokenUrl, HttpMethod.POST, entity,A.class);
return response.getBody().token_type + " " +
    response.getBody().access_token;

}
}

@RunWith(MockitoJUnitRunner.class)
@TestPropertySource(properties = {
     "car.services.clientId = clientId ","car.services.authTokenUrl = authTokenUrl",
})
public class CarTest {
    @Value("${car.services.clientId}")
    private String clientId;
    @Value("${car.services.authTokenUrl}")
    private String authTokenUrl;
    mockServer = MockRestServiceServer.createServer(restTemplate);
    HttpHeaders headers = new HttpHeaders();
    headers.set(CONTENT_TYPE, "application/x-www-form-urlencoded");
    headers.set(ACCEPT, APPLICATION_JSON);
    HttpEntity<String> entity = new HttpEntity<>(
            "grant_type=password&client_id=null", headers);
    authTokenUrl = "";
    new ResponseEntity<>("", HttpStatus.OK);
    A access = new A();
    access.access_token = "token";
    access.token_type = "type";
    response = new ResponseEntity<>(access, HttpStatus.OK);
    Mockito.when(restTemplate.exchange(authTokenUrl, HttpMethod.POST, entity, A.class))
            .thenReturn(response);

1 Ответ

0 голосов
/ 01 февраля 2019

Возможно, проблема в вашем классе Runner, поскольку MockitoJUnitRunner не инициализирует какие-либо компоненты или аннотации @Value.

Ответ Spring на это SpringJUnit4ClassRunner, который делает эти биты для вас (документация здесь ).

Попробуйте заменить @RunWith(MockitoJUnitRunner.class) на @RunWith(SpringJUnit4ClassRunner.class).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...