尝试使用JUnit5进行测试时出现NullPointerException

时间:2019-11-19 15:55:15

标签: java junit

所以我正在尝试测试以下代码:

@Test
public void faarFalse() throws IOException {
    String filStiTilArrangementer = "src/main/java/gruppeeksamen/arrangementer.csv";
    String filStiTilLoggetInn = "../../View/loggetInn.fxml";

    ObservableList listeFor = FXCollections.observableArrayList();
    dataHandler.hentDataHele(filStiTilArrangementer, listeFor);

    navnPaaArrangement = "Test arrangement";
    datoPaaArrangement = "2020-10-10";
    typeIdrettPaaArrangement = "Ski";
    leggTilArrangementController.leggeTilArrangementet(navnPaaArrangement, datoPaaArrangement, typeIdrettPaaArrangement, filStiTilArrangementer, filStiTilLoggetInn); //Line 148 ref. error message

    ObservableList listeEtter = FXCollections.observableArrayList();
    dataHandler.hentDataHele(filStiTilArrangementer, listeEtter);
    assertTrue(listeFor.size() < listeEtter.size());

    //fjernet linjen som er lagt til
    RandomAccessFile f = new RandomAccessFile(filStiTilArrangementer, "rw");
    long length = f.length() - 1;
    byte b;
    do {
        length -= 1;
        f.seek(length);
        b = f.readByte();
    } while(b != 10);
    f.setLength(length+1);
    f.close();
}

正在测试此代码:

public class LeggTilArrangementController {

@FXML
private Button btnGaaTilbake;

public void leggeTilArrangementet(String arrangement, String dato, String idrett, String filstienTilArrangementene, String filstienTilLoggetInn) {
    //sjekker om alle "forhåndsregler" er gjort for å kunne legge til et arrangement
    if (sjekkOmAlleInputErFyltUt(arrangement, dato, idrett) && sjekkOmdagensDatoErMindreEnnDatePicker(dato) && arrangementPaaSammeDatoIkkeFinnes(arrangement, dato.replace("-","."), idrett)){
        //lager en ny linje med navnet på arrangementet, antall utøvere (som fra start skal være 0), utøvere (som fra start skal være tom), datoen (åååå.mm.dd), type idrett
        String nyttArrangement = arrangement + ";0"/*antall utøvere*/ + ";" /*utøvere*/ + ";" + dato.replace("-",".") + ";" + idrett + "\n";
        //prøver å legge til arrangementet på sisten av arrangementer.csv
        try {
            FileWriter filenSomSkalSkrivesTil = new FileWriter(filstienTilArrangementene, true);
            filenSomSkalSkrivesTil.append(nyttArrangement);
            filenSomSkalSkrivesTil.flush();
            filenSomSkalSkrivesTil.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //lukker nåværende vindu
        goBack(filstienTilLoggetInn); //Line 76 ref. error message
    } else {
        MainJavaFX.visAlertFeilmelding("Mangler arrangement, dato eller idrett","Må fylle inn en av delene");
    }
}


private void goBack(String filstienTilLoggetInn) {
    Stage stage = (Stage) btnGaaTilbake.getScene().getWindow(); //Line 50 ref. error message
    stage.close();
    DataHandler.sendTilNyScene(filstienTilLoggetInn, "Arrengementer", 500, 500);
}
}

该测试应该测试是否已将新行写入CSV文件,但是当我尝试运行测试时,我得到的只是以下消息:

java.lang.NullPointerException
at gruppeeksamen.Controller.LeggTilArrangementController.goBack(LeggTilArrangementController.java:50)
at gruppeeksamen.Controller.LeggTilArrangementController.leggeTilArrangementet(LeggTilArrangementController.java:76)
at gruppeeksamen.Controller.LeggTilArrangementControllerTest.faarFalse(LeggTilArrangementControllerTest.java:148)

谁知道我为什么收到此错误消息?
PS:当我删除/注释第76行参考时。错误消息,测试正常,但程序无法正常工作。

1 个答案:

答案 0 :(得分:0)

查看您突出显示的代码和行可能是由于以下两个原因之一:

btnGaaTilbake.getScene()

btnGaaTilbake为null或方法getScene()重新调整为null。请检查两个变量都返回正确的值。