AnswerBun.com

Mock variável local dentro de método com mockito e spring boot

Stack Overflow em Português Asked by Samuel Oliveira Chaves on December 17, 2020

Estou tentando simular o retorno de um método em uma variável local, mas é sempre nulo, mostrando java.lang.NullPointerException

Eu tenho o seguinte código dentro de um @service:

@Service
@AllArgsConstructor
public class VideoEncodingService {
  private final MainService mainService;
  @Value("${bucket.videos.aws.s3}")
  private String bucketS3;

  @Value("${accessKey.acess.bucket}")
  private String accessKeyS3;

  @Value("${secretKey.acess.bucket}")
  private String secretKeyS3;

  @Value("${bit.movin.url.api.output.s3}")
  private String urlEndpointOutputS3;

public void createOutputS3(Config cf) {
    // encoding/outputs/s3
    OutputS3DTO os3 = mainService.returnObject(urlEndpointOutputS3,
        new OutputS3DTO(bucketS3, accessKeyS3, secretKeyS3), new TypeReference<OutputS3DTO>() {});
    cf.setIdOutputS3(os3.getId());
  }
}
@Service
@AllArgsConstructor
public class MainService {

  private final RestTemplate restTemplate;


  private final ObjectMapper mapper;

  @Value("${bit.movin.url}")
  private String urlBaseBitMovin;

  @Value("${bit.movin.api.key}")
  private String apiKey;

  protected <T> String post(String urlApi, T object) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("X-Api-Key", apiKey);
    HttpEntity<?> request = new HttpEntity<>(getJSON(object), headers);
    return restTemplate.postForObject(urlBaseBitMovin + urlApi, request, String.class);
  }

  private <T> String getJSON(T instance) throws RuntimeException {
    try {
      return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(instance);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  @SuppressWarnings("unchecked")
  public <T> T returnObject(String endpoint, T instance, TypeReference<T> typeReference)
      throws RuntimeException {
    try {
      String jsonResult = post(endpoint, instance);
      JSONObject jSONObject = new JSONObject(jsonResult);
      JSONObject resultObject;
      resultObject =
          jSONObject.getJSONObject(KEY_DATA_BIT_MOVIN).getJSONObject(KEY_RESULT_BIT_MOVIN);
      if (resultObject != null) {
        return (T) mapper.readValue(resultObject.toString(), instance.getClass());
      }
    } catch (Exception e) {
      throw new RuntimeException(e.toString());
    }
  }
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OutputS3DTO{
  /**
   * 
   */
  private static final long serialVersionUID = 1L;

  private String id;
  private String name = "S3 storage config";
  private String bucketName;
  private String accessKey;
  private String secretKey;

  public OutputS3DTO(String id) {
    this.id = id;
  }
}

Estou testando com mockito assim:

package br.com.video;

@RunWith(MockitoJUnitRunner.class)
public class EncodingVideoTestApplicationTests {

  @InjectMocks
  private VideoEncodingService videoEncodingService;

  @Mock
  private MainService mainService;


  @Test
  public void createOutputS3() {
    videoEncodingService = new VideoEncodingService(mainService);
    OutputS3DTO s3 = new OutputS3DTO("1");
    Config config = new Config();
    Mockito.when(mainService.returnObject(Mockito.anyString(), Mockito.any(), Mockito.any()))
        .thenReturn(s3);
    videoEncodingService.createOutputS3(config);
    assertEquals(config.getIdOutputS3(), "1");
  }

}

Nesse linha:

cf.setIdOutputS3(os3.getId());

os3 sempre é nulo

One Answer

Fala Samuel. Acredito que sua chamada pro createOutputS3 dentro do teste, esteja instanciando a classe VideoEncodingService com valores nulos nas propriedades.

Com isso, quando você usa Mockito.anyString(), ele vai esperar uma string pra entender que aquela chamada deve ser mockada, mas como está vindo nulo em "urlEndpointOutputS3", o mock não acontece.

Tenta debugar pra ver se isso realmente está acontecendo, e se for isso, muda o anyString pra "any". Se o any não aceitar null, coloca todos os parametros do seu mock como "null" em vez de "any"

Answered by Danilo Rodrigues on December 17, 2020

Add your own answers!

Related Questions

EXCEL – VBA – SQL – Duvida na query usando CAST

0  Asked on November 30, 2021 by thiago

       

GIT error: pathspec ‘master’ did not match any file(s) known to git

4  Asked on November 30, 2021 by alessandra-burckhalter

 

(JAVASCRIPT) Como estilizar o layout desse código JS?

2  Asked on November 27, 2021 by user198468

         

Background gradient se repetindo

4  Asked on November 27, 2021 by user96296

   

Como ter um intervalo de ciclo, até n e até

2  Asked on November 27, 2021 by bruno-bacelar

   

O que seria esse “k_BackingField”

2  Asked on November 27, 2021 by willian

     

Converter double para string mantendo o mesmo formato

1  Asked on November 27, 2021 by mik3i4a5

     

upload com ajax e formdata exibe erro

2  Asked on November 27, 2021

     

Flutter – Como alterar o tamanho de um TextField corretamente?

2  Asked on November 27, 2021 by jonas-ferreira

         

Como automatizar a criação de planilhas excel em R

0  Asked on November 27, 2021 by exartt

 

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir