简体   繁体   English

如何使用 Gson 解析验证我的 Junit 测试

[英]How I can to validate my Junit test with Gson parse

I'm using the Gson library and jakarta.我正在使用 Gson 库和雅加达。 Although I have been able to use the conversion in CarrinhoResource.java as below, my ClienteTest.java cannot use the String content (already in json) inside the cart.虽然我已经能够在 CarrinhoResource.java 中使用如下转换,但我的 ClienteTest.java 不能使用购物车内的字符串内容(已经在 json 中)。 I cant run my test a just only message into my intellij is (Cannot resolve method 'fromJson(java.lang.String)').我无法运行我的测试,只有一条消息进入我的智能是(无法解析方法'fromJson(java.lang.String)')。 Can someone help me?有人能帮我吗?

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());


    }
}
Carrinho carrinho = (Carrinho) new Gson().fromJson(conteudo); **//Cannot resolve method 'fromJson(java.lang.String)'/**

The reason for this is that there is no Gson.fromJson(String) method, see the Gson class documentation .这样做的原因是没有Gson.fromJson(String)方法,参见Gson类文档 For deserialization Gson needs to know which type you are expecting, so all fromJson methods have a second parameter representing the type.对于反序列化,Gson 需要知道您期望的是哪种类型,因此所有fromJson方法都有一个表示类型的第二个参数。

You can simply change your code to:您可以简单地将代码更改为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM