2013-05-22 14 views
7

Qual è la differenza tra il seguire due blocchi di codice?Qual è la differenza tra assert oggetto! = Null e Assert.assertNotNull (oggetto)?

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    Assert.assertNotNull(object); 
} 

E

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    assert object!=null; 
} 

Capisco che Assert.AssertNotNull è una chiamata di funzione da TestNG e assert è una parola chiave di Java (introdotto in Java 1.4). Ci sono altre differenze in questi due? per esempio. lavoro, prestazioni, ecc.

risposta

7

Bene, il primo caso utilizza la classe Assert dal framework di test ed è la giusta via da seguire, poiché TestNG segnala l'errore in modo intelligente.

È inoltre possibile aggiungere il proprio messaggio alla prova:

Assert.assertNotNull(object, "This object should not be null"); 

Il secondo caso usa la parola assert - che vi darà un fallimento, ma l'analisi dello stack può o non può essere comprensibile a colpo d'occhio. Devi anche essere consapevole che le asserzioni NON possono essere abilitate.

3

sì, c'è: la parola chiave assert deve essere attivata utilizzando il flag -ea, come

java -ea MyClass 

L'asserzione può Perciò essere acceso e spento, senza alcuna modifica al codice.

La classe Assert funzionerà sempre. Quindi, se stai facendo test, usa la classe Assert, mai la parola chiave assert. Questo potrebbe darti l'idea che tutti i tuoi test stanno passando e che in realtà non asseriscono nulla. Nei miei 10+ anni di programmazione, non ho mai visto nessuno abilitare le asserzioni ad eccezione di Jetbrains, quindi usa Assert. O meglio, usa Hamcrest.

+0

Questo viene eseguito all'interno di una piattaforma TestNG. TestNG abilita le dichiarazioni di asserzione. Non sono sicuro di dove stai ottenendo le tue informazioni. –

+0

Hai ragione, ho aggiornato la mia risposta per correggere questo. Grazie! –

0

La differenza è fondamentalmente la mancanza della parola chiave assert. Questa è la fonte da TestNG:

static public void assertNotNull(Object object) { 
    assertNotNull(object, null); 
} 

static public void assertNotNull(Object object, String message) { 
    assertTrue(object != null, message); 
} 

prega di notare che il PO utilizzato il tag TestNG!

Questo non è Assert di JUnit!

Alcune informazioni su assert parole chiave di Java: assert

2

si parla di prestazioni:

assert object!=null; è una singola istruzione java ma Assert.assertNotNull(object) si tradurrà in chiamare delle funzioni multiple di TestNG, così w.r.t. le prestazioni assert object!=null; saranno leggermente migliori.

+0

Cosa intendi con un po 'meglio? Potete per favore fornire alcuni numeri. – Senstive

+0

Intendo leggermente "assert object! = Null;" avrà meno tempo, ma la differenza sarà in millisecondi – Raheel