3
respostas

Como obter objeto de jsonPath neste caso?

No caso abaixo, como obter objeto de jsonPath?

{
  "cep": "94050-030",
  "logradouro": "Rua Araranguá",
  "complemento": "",
  "bairro": "COHAB A",
  "localidade": "Gravataí",
  "uf": "RS",
  "unidade": "",
  "ibge": "4309209",
  "gia": ""
}

Código:

@Test
    public void validaCepValido() {
        JsonPath retorno = given().header("Accept", "application/json").expect().statusCode(200).get("95233654/json/")
                .andReturn().jsonPath();

        Endereco resposta = retorno.getObject(path???, Endereco.class);

    }
3 respostas

A única forma que consegui foi assim, mas pegando um por um com getstring, se alguém tiver uma ideia melhor, por favor ajude.

@Test
    public JsonPath getJsonCep(String cep) {
        JsonPath retorno = given().header("Accept", "application/json").expect().statusCode(200)
                .get(cep + "/json/").andReturn().jsonPath();

        Endereco endRetornado = new Endereco();
        endRetornado.setCep(retorno.getString("cep"));
        endRetornado.setLogradouro(retorno.getString("logradouro"));
        endRetornado.setComplemento(retorno.getString("complemento"));
        endRetornado.setBairro(retorno.getString("bairro"));
        endRetornado.setLocalidade(retorno.getString("localidade"));
        endRetornado.setUf(retorno.getString("uf"));
        endRetornado.setUnidade(retorno.getString("unidade"));
        endRetornado.setIbge(retorno.getString("ibge"));
        endRetornado.setGia(retorno.getString("gia"));

        assertEquals(endEsperado, endRetornado);

    }

Oi Marcelle, tudo bem ?

Vi que tá parada faz um tempinho nisso :(

Talvez você possa isolar a criação em uma factory que recebe o json, pelo menos você não tem todo esse código no meio do seu test, o que acha ?

Olha, também tive esse problema e resolvi deixando 'sem valor', ex:

Supondo que o retorno está vindo como:

{"nome":"Uva", "descricao":"Fruta" "imagem" :"Imagem1"}

Método de teste feito:

@Test
public void gravaNoDataBase() {
String URL2 = "/api/produtos/cadastro";
        Produto produto = new Produto("Uva", "Fruta", "Imagem1");

        Jsonpath =
                given()
                    .header("Accept", "application/json")
                    .contentType("application/json")
                    .body(produto)
                .expect()
                    .statusCode(200)
                .post(URL2)
                    .andReturn().jsonPath();

Produto resposta = path.getObject("", Produto.class);        // Esse Object possui os mesmo atributos do JSON retornado

System.out.println(resposta.nome);        // Imprime "Uva"

Mas também vi que na vídeo aula, o objeto retornado vem com o nome da classe ex:

{produto: {"nome":"Uva", "descricao":"Fruta" "imagem":"Imagem1"}}

E assim faria sentido usar no ".getObject('produto', Produto.class)",

O que é preciso para ficar dessa forma?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software