我不能用JUnit Jupter运行测试,在消息“正在解析启动配置”时挂起,如何修复它?

70gysomp  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(113)

我使用的是Junit Jupiter。我是用vscode安装的。这是我的lib junit-platform-console-standalone-1.9.0.jar,用的是vs代码:

我的文件是:
Main.java

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Main {
    public static void main(String[] args) throws ParseException {
        Agenda agenda = new Agenda();
        Compromisso compromisso = new Compromisso("Matheus", "31/08/2022");
        agenda.addCompromissoPeriodico(compromisso, 7,3);
        for (int i = 0; i < agenda.getAgenda().size(); i++) {
            System.out.print(agenda.getAgenda().get(i).getNome());
            SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
            System.out.print(agenda.getAgenda().get(i).getDataCompromisso().getData());
        }

    }
}

Agenda.java

import java.text.ParseException;
import java.util.ArrayList;
import java.util.GregorianCalendar;

import static java.util.Calendar.DAY_OF_MONTH;

public class Agenda {

    private static ArrayList<Compromisso> agenda = new ArrayList<>();
    private static GregorianCalendar gc;

    public void addCompromisso(Compromisso compromisso) {
        agenda.add(compromisso);
    }

    public void addCompromissoPeriodico(Compromisso compromisso, int repetirAcada, int numeroRepeticoes) {

        gc = iniciarCalendar(compromisso.getDataCompromisso());

        for (int i = 0; i <= numeroRepeticoes; i++) {
            addCompromisso(compromisso);
            gc.add(DAY_OF_MONTH, repetirAcada);
            compromisso.getDataCompromisso().setData(gc.getTime());
        }
    }

    public void vizualizarCompromissos(String diaInicial, String diaFinal) throws ParseException {
        DataC dataInicial;
        DataC dataFinal = new DataC(diaFinal);

        for (Compromisso compromisso : agenda) {
            dataInicial = new DataC(diaInicial);
            gc = iniciarCalendar(dataInicial);

            while (dataInicial.getData().equals(dataFinal.getData())) {
                if (compromisso.getDataCompromisso().getData() == dataInicial.getData()) {
                    compromisso.imprimirCompromisso();
                }
                gc.add(DAY_OF_MONTH, 1);
            }
        }
    }

    private GregorianCalendar iniciarCalendar(DataC data) {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(data.getData());
        return gc;
    }

    //#region Getter

    public static ArrayList<Compromisso> getAgenda() {
        return agenda;
    }

    //#endregion
}

Compromisso.java

import java.text.ParseException;

public class Compromisso {

    //#region Atributos
    private static String nome;
    private static DataC dataCompromisso;

    //#endregion

    //#region Construtores

    /**
     * Inicializa o objeto compromisso a Partir de uma String nome e uma String com a data do compromisso.
     *
     * @param name            Espera uma String para atribuir ao objeto compromisso
     * @param dataCompromisso Espera uma String no formato dd/MM/yyyy para atribuir ao objeto compromisso
     */
    public Compromisso(String name, String dataCompromisso) throws ParseException {
        init(name, dataCompromisso);
    }

    /**
     * Inicializa o objeto compromisso com o valor de nome "Não Iniciado" e a Data "01/01/2022"
     */
    public Compromisso() throws ParseException {
        init("Não Iniciado", "01/01/2022");
    }

    //#endregion

    //region Métodos

    /**
     * Método privado utilizado para auxiliar na atribuição dos construtores
     *
     * @param nome            Espera uma String para atribuir o nome.
     * @param dataCompromisso Espera uma String no formato dd/MM/yyyy.
     * @throws ParseException Lança uma excessão caso o formato não corresponda ao esperado.
     */
    private void init(String nome, String dataCompromisso) throws ParseException {
        Compromisso.nome = nome;
        Compromisso.dataCompromisso = new DataC(dataCompromisso);
    }

    /**
     * Método utilizado para imprimir na tela, os dados do compromisso no formato String
     */
    public void imprimirCompromisso() {
        System.out.println(nome);
        System.out.println(dataCompromisso.dataEmString());
    }
    //#endregion

    //#Region Getters

    public String getNome() {
        return nome;
    }

    public DataC getDataCompromisso() {
        return dataCompromisso;
    }

    //#endregion
}

DataC.java

import java.util.*;
import java.text.*;

public class DataC {

    //#region Atributos
    private Date data;

    //#endregion

    //#region Construtores

    /**
     *  Inicializa o objeto Data, a partir da String com a data correspondente
     * @param inputUsuario Espera uma String no formato dd/MM/yyyy
     * @throws ParseException Lança excessão caso o formato do input esteja fora do padrão dd/MM/yyyy
     */
    DataC(String inputUsuario) throws ParseException {
        init(inputUsuario);
    }

    /**
     * Inicializa o objeto data com o valor "01/01/2022 caso não seja passado nenhum parâmetro"
     */
    DataC() throws ParseException {
        init("01/01/2022");
    }

    //#endregion

    //#region Métodos

    /**
     *  Método privado utilizado para iniciar os construtores
     * @param inputUsuario Espera uma String no formato "dd/MM/yyyy"
     * @throws ParseException Lança excessão caso o formato do input esteja fora do padrão dd/MM/yyyy
     */
    private void init(String inputUsuario) throws ParseException {
        SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
        this.data = sdf1.parse(inputUsuario);
    }

    /**
     * Método que converte a variavel date para String
     * @return Retorna uma String no formato "dd/MM/yyyy"
     */
    public String dataEmString() {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        return dateFormat.format(this.data);
    }

    //#endregion

    //#region Getters & Setters

    public Date getData() {
        return data;
    }
    public void setData(Date data) {
        this.data = data;
    }
    //#endregion

}

TestAgenda.java

import org.junit.jupiter.api.Test;

import java.text.ParseException;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestAgenda {

    private static Agenda agenda = new Agenda();
    private static Compromisso compromisso;

    static {
        try {
            compromisso = new Compromisso("Aniversario", "20/04/2003");
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    public void insereNaLista() {

        agenda.addCompromisso(compromisso);
        assertEquals(Agenda.getAgenda().get(0).getNome(), "Aniversario");
    }

}

TestCompromisso.java

import org.junit.jupiter.api.Test;

import java.text.ParseException;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestCompromisso {
    @Test
    public void criarCerto() throws ParseException {
        Compromisso compromisso = new Compromisso("Meu aniversario", "20/04/2003");
        assertEquals(compromisso.getNome(), "Meu aniversario");
        assertEquals(compromisso.getDataCompromisso().dataEmString(), "20/04/2003");
    }

    @Test
    public void criarCertoVazio() throws ParseException {
        Compromisso compromisso = new Compromisso();
        assertEquals(compromisso.getNome(), "Não Iniciado");
        assertEquals(compromisso.getDataCompromisso().dataEmString(), "01/01/2022");
    }

}

TestData.java

import org.junit.jupiter.api.Test;

import java.text.ParseException;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestData {
    @Test
    void imprimirCorreto() throws ParseException {
        DataC dataUsuario = new DataC("20/04/2003");
        String dataConvertida = dataUsuario.dataEmString();
        assertEquals(dataConvertida, "20/04/2003");
    }

    @Test
     void criarData() throws ParseException {
        DataC dataUsuario = new DataC("20/04/2003");
        assertEquals(dataUsuario.dataEmString(), "20/04/2003");
    }

    @Test
    void criarDataVazia() throws ParseException {
        DataC dataUsuario = new DataC();
        assertEquals(dataUsuario.dataEmString(), "01/01/2022");
    }

}

请不要担心代码质量。
当我运行代码工作时:

但如果我运行测试挂起消息“解析启动配置”如下图:

我尝试了很多方法。降级扩展和packejes,连接到另一个网络,改变文件夹和路径。我尝试从其他地方安装 *.jar,但我不能在vs代码中运行。我验证并改变引用。没有任何效果。
我使用的Windows 10在最后一个更新版本,64位.

332nm8kg

332nm8kg1#

从你的代码来看,你似乎遇到了一个similar to this问题。如果你的扩展不是最新版本(0.37.1),那么请更新它并重新加载vscode,因为这个问题昨天刚刚修复并发布。对我来说,我也必须更新vscode才能让它工作,所以你可能也需要这样做。希望这个答案对你有帮助。

相关问题