Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não consigo criar os testes com a lib Gson

Bom dia pessoal,

Como o projeto esta muito defasado, atualizei algumas bibliotecas como a Jakarta e Gson. Embora eu tenha conseguido utilizar o a conversão no CarrinhoResource.java conforme abaixo, meu ClienteTest.java não consegue utilizar a String conteudo (já em json) dentro do carrinho.


Classe CarrinhoResource.java

package br.com.alura.loja.resource;

import br.com.alura.loja.dao.CarrinhoDAO; import br.com.alura.loja.modelo.Carrinho; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType;

@Path("/v1/carrinhos") public class CarrinhoResource {

@GET
@Produces(MediaType.APPLICATION_JSON)
public String busca(){
  Carrinho carrinho = new CarrinhoDAO().busca(1L);
return carrinho.toJson();
}

}


Classe Carrinho.java package br.com.alura.loja.modelo;

import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.google.gson.Gson;

public class Carrinho {

private List<Produto> produtos = new ArrayList<Produto>();
private String rua;
private String cidade;
private long id;

public Carrinho adiciona(Produto produto) {
    produtos.add(produto);
    return this;
}

public Carrinho para(String rua, String cidade) {
    this.rua = rua;
    this.cidade = cidade;
    return this;
}

public Carrinho setId(long id) {
    this.id = id;
    return this;
}

public String getRua() {
    return rua;
}

public void setRua(String rua) {
    this.rua = rua;
}
public void setCidade(String cidade) {
    this.cidade = cidade;
}

public long getId() {
    return id;
}

public void remove(long id) {
    for (Iterator iterator = produtos.iterator(); iterator.hasNext();) {
        Produto produto = (Produto) iterator.next();
        if(produto.getId() == id) {
            iterator.remove();
        }
    }
}

public void troca(Produto produto) {
    remove(produto.getId());
    adiciona(produto);
}

public void trocaQuantidade(Produto produto) {
    for (Iterator iterator = produtos.iterator(); iterator.hasNext();) {
        Produto p = (Produto) iterator.next();
        if(p.getId() == produto.getId()) {
            p.setQuantidade(produto.getQuantidade());
            return;
        }
    }
}

public List<Produto> getProdutos() {
    return produtos;
}

public String toJson() {
    return new Gson().toJson(this);
}

}


ClienteTest.java (com erro)

package br.com.alura.loja;

import br.com.alura.loja.modelo.Carrinho; import com.google.gson.*; import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.ClientBuilder; import jakarta.ws.rs.client.WebTarget; import org.junit.Assert; import org.junit.Test;

public class ClienteTest {

@Test
public void testaConexaoServidor() {

    Client client = ClientBuilder.newClient();
    WebTarget target = client.target("http://localhost:8085");
    String conteudo = target.path("/v1/carrinhos").request().get(String.class);

    Carrinho carrinho = (Carrinho) new Gson().fromJson(conteudo); ***Cannot resolve method 'fromJson(java.lang.String)'
    System.out.println(carrinho);
    Assert.assertEquals("Rua Vergueiro, 3185", carrinho.getRua());


}

}

2 respostas
solução!

Olá Alessandro,

Você precisa especificar uma classe para o GSON para que ele realize a conversão correta do JSON para um objeto Java:

Carrinho carrinho = new Gson().fromJson(conteudo, Carrinho.class);

Espero ter ajudado.

Resolvido Obrigado!