asserire contro JUnit Assertions

Oggi ho visto un caso di test JUnit con un’asserzione java al posto delle asserzioni JUnit: ci sono vantaggi o svantaggi significativi da preferire uno rispetto all’altro?

In JUnit4 l’eccezione (in realtà Errore) generata da un asserzione JUnit è uguale all’errore generato dalla parola chiave java assert (AssertionError), quindi è esattamente la stessa di assertTrue e diversa dalla traccia dello stack non è ansible distinguere la differenza .

Detto questo, le affermazioni devono essere eseguite con un flag speciale nella JVM, facendo sì che molti test sembrino passare solo perché qualcuno ha dimenticato di configurare il sistema con quel flag quando sono stati eseguiti i test JUnit – non va bene.

In generale, a causa di ciò, direi che l’utilizzo di JUnit assertTrue è la migliore, perché garantisce che il test sia eseguito, assicura coerenza (a volte si usa assertThat o altri assertThat che non sono una parola chiave java) e se il comportamento di Le affermazioni di JUnit dovrebbero cambiare in futuro (ad esempio agganciandosi a qualche tipo di filtro o ad altre future funzionalità di JUnit) il tuo codice sarà in grado di sfruttarle.

Il vero scopo della parola chiave assert in java è di essere in grado di distriggersrlo senza penalità di runtime. Questo non si applica ai test unitari.

Preferisco le asserzioni JUnit in quanto offrono un’API più ricca rispetto alla dichiarazione assert integrata e, cosa più importante, non è necessario che siano esplicitamente abilitate a differenza di assert , che richiede l’argomento -ea JVM.

Quando un test fallisce ottieni più informazioni.

assertEquals(1, 2); risultati in java.lang.AssertionError: expected:<1> but was:<2>

vs

assert(1 == 2); risultati in java.lang.AssertionError

puoi ottenere ancora più informazioni se aggiungi l’argomento del messaggio per assertEquals

Direi che uso JUnit asserisce nei casi di test e usa l’asserzione di java nel codice. In altre parole, il codice reale non avrà mai le dipendenze JUnit, come ovvio, e se si tratta di un test, dovrebbe usare le varianti JUnit di esso, mai l’asserzione.

Direi che se usi JUnit dovresti usare le asserzioni JUnit. assertTrue() è praticamente lo stesso di assert , altrimenti perché usare JUnit?

Questo potrebbe non essere applicabile se utilizzi esclusivamente materiale che è brillante e nuovo, ma asserire non è stato introdotto in Java fino alla 1.4SE. Pertanto, se si deve lavorare in un ambiente con tecnologia meno recente, è ansible rivolgersi a JUnit per motivi di compatibilità.