Eseguire il metodo tearDown dopo tutti i test Junit 4.13

di il
2 risposte

Eseguire il metodo tearDown dopo tutti i test Junit 4.13

Salve a tutti, vorrei eseguire il metodo di tearDown dopo l'esecuzione di tutti i test della classe, quindi alla fine come ultima cosa. Come potrei fare? Ho provato con l'annotazione @AfterClass ma viene eseguito dopo ogni test.

@BeforeClass
public void setUp() {
    for (int i = 0; i < Costanti.DIM_T; i++) {
        File destFileDecoding = new File(Costanti.DESTPATH_DECODING_T + i + "-stego.pdf");
        System.out.println(destFileDecoding.toString());
        String fileNameDecoding = destFileDecoding.getName().replace(".pdf", "");
        DecoderManager dm = new DecoderManager(destFileDecoding,
                new File(Costanti.DESTPATH_ENCODING_T + "/" + fileNameDecoding + "-message.txt"));
        listaDM.add(i, dm);
    }
    System.out.println("Lista di decoder manager dopo : " + listaDM.toString());
}

@Test
public void test0() {
    String decodedMsg = null;
    try {
        decodedMsg = this.listaDM.get(0).decode();
        assertTrue(decodedMsg.contains(Costanti.PASSPHRASE));
    } catch (IOException ex) {
        ex.printStackTrace();
        fail();
    }
}   

@Test
public void test1() {
    String decodedMsg = null;
    try {
        decodedMsg = this.listaDM.get(1).decode();
        assertTrue(decodedMsg.contains(Costanti.PASSPHRASE));
    } catch (IOException ex) {
        ex.printStackTrace();
        fail();
    }
}   

@AfterClass
public void tearDown() {
    System.out.println("Sto facendo il teardown");
    for (DecoderManager decoderManager : listaDM) {
        File fileStego = decoderManager.getToDecodeFile();
        System.out.println("cancello");
        File fileTesto = decoderManager.getMessageDest();
        fileStego.delete();
        fileTesto.delete();
    }
}

2 Risposte

  • Re: Eseguire il metodo tearDown dopo tutti i test Junit 4.13

    Credo sia sufficiente usare @Before (e @After) per definire l'inizializzazione (e la finalizzazione) da eseguire rispettivamente prima e dopo ogni test.

    Usando @BeforeClass oppure @BeforeAll (e i corrispondenti @After...) invece questa viene eseguita una tantum per tutta la suite di test, se ricordo bene.

    Ciao!
  • Re: Eseguire il metodo tearDown dopo tutti i test Junit 4.13

    @Before/@After vengono eseguiti prima/dopo ciascun metodo @Test.

    @BeforeClass/@AfterClass vengono eseguiti prima/dopo TUTTI i metodi @Test in una classe. Nota: il metodo @BeforeClass/@AfterClass va messo come public static void (non "di istanza"!).
Devi accedere o registrarti per scrivere nel forum
2 risposte