如何使用 Gson 解析验证我的 Junit 测试
Posted
技术标签:
【中文标题】如何使用 Gson 解析验证我的 Junit 测试【英文标题】:How I can to validate my Junit test with Gson parse 【发布时间】:2021-12-24 21:16:48 【问题描述】:我正在使用 Gson 库和 jakarta。虽然我已经能够使用 CarrinhoResource.java 中的转换,如下所示,但我的 ClienteTest.java 无法使用购物车内的字符串内容(已经在 json 中)。我无法在我的 intellij 中运行我的测试,只有一条消息是(无法解析方法'fromJson(java.lang.String)')。 有人可以帮我吗?
Class 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();
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
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());
【问题讨论】:
【参考方案1】:Carrinho carrinho = (Carrinho) new Gson().fromJson(conteudo); **//Cannot resolve method 'fromJson(java.lang.String)'/**
原因是没有Gson.fromJson(String)
方法,见Gson
class documentation。对于反序列化,Gson 需要知道您期望的类型,因此所有fromJson
方法都有一个表示类型的第二个参数。
您只需将代码更改为:
Carrinho carrinho = new Gson().fromJson(conteudo, Carrinho.class);
【讨论】:
以上是关于如何使用 Gson 解析验证我的 Junit 测试的主要内容,如果未能解决你的问题,请参考以下文章