Sono stato un po 'di volte da Java assert
dichiarazioni che non sono fallite nella suite di test JUnit perché le asserzioni non erano abilitate nell'istanza JVM di JUnit. Per essere chiari, si tratta di asserzioni "black box" all'interno delle implementazioni (controllo invarianti, ecc.) Non delle asserzioni definite dai test JUnit stessi. Certo, mi piacerebbe cogliere eventuali errori di asserzione nella suite di test.JUnit: abilita le asserzioni nella classe in prova
La soluzione più ovvia è quella di essere molto attenti utilizzare -enableassertions
ogni volta che corro JUnit, ma preferirei una soluzione più robusta. Un'alternativa è quella di aggiungere il seguente test per ogni classe di test:
@Test(expected=AssertionError.class)
public void testAssertionsEnabled() {
assert(false);
}
Esiste un modo più automatico per ottenere questo risultato? Un'opzione di configurazione a livello di sistema per JUnit? Una chiamata dinamica che potrei inserire nel metodo setUp()
?
Solo una domanda di carattere generale. Se vuoi veramente testare il tuo codice, non dovresti testare e senza le affermazioni abilitate? Una cosa è che le affermazioni sono davvero buone ** perché sta introducendo effetti collaterali inaspettati. –
btw. come stai gestendo i JUnit Testcases? Se hai qualche gestore di build (formica, esperto), dovrebbe essere banale aggiungere questo switch di default – jitter
@Alexander: non è una cattiva idea. @jitter: certo che hai ragione. Maven sembra abilitare le asserzioni di default. Non avevo notato prima che Eclipse avesse un'impostazione di preferenza per questo. Il problema è che questo tipo di impostazioni può cambiare alle tue spalle ... –