differenze tra 2 classi JUnit Assert


257

Il framework JUnit contiene 2 Assertclassi (in diversi pacchetti, ovviamente) e i metodi su ciascuno sembrano essere molto simili. Qualcuno può spiegare perché questo è?

Le classi a cui mi riferisco sono: junit.framework.Asserte org.junit.Assert.


8
In Intellij IDEA, è possibile escludere junit.framework.*dal menu a discesa dell'importazione statica in Editor->General->Auto Import->Exclude from Import and Completion.
jordanpg,

Risposte:


239

Il vecchio metodo (di JUnit 3) era di contrassegnare le classi di test estendendole junit.framework.TestCase. Ciò si è ereditato junit.framework.Asserte la tua classe di test ha acquisito la capacità di chiamare i metodi assert in questo modo.

Dalla versione 4 di JUnit, il framework utilizza Annotationsper contrassegnare i test. Quindi non è più necessario estendere TestCase. Ciò significa che i metodi di asserzione non sono disponibili. Ma puoi effettuare un'importazione statica della nuova Assertclasse. Ecco perché tutti i metodi assert nella nuova classe sono metodi statici. Quindi puoi importarlo in questo modo:

import static org.junit.Assert.*;

Dopo questa importazione statica, è possibile utilizzare questo metodo senza prefisso.

Alla riprogettazione si sono anche spostati nel nuovo pacchetto org.junitche segue meglio le normali convenzioni per la denominazione dei pacchetti.


6
Questa risposta non è del tutto corretta, è possibile effettuare importazioni statiche di metodi nella classe junit.framework.Assert e org.junit.Assert. Tuttavia, è probabilmente una buona idea attenersi alla classe org.junit.Assert poiché è più recente, leggermente riscritta e probabilmente intesa come sostituto.
Glenn Bech,

75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Preferisci quello più recente, soprattutto quando esegui JDK5 e versioni successive con supporto per le annotazioni.


19

C'è in effetti un cambiamento funzionale: org.junit.Assertsi lamenterà se si utilizza l'argomento due assertEquals()con floato double, mentre junit.framework.Assertlo si boxerà automaticamente.


5

Credo che siano refactoring da junit.frameworka org.junited junit.framework.Assertè mantenuto per la compatibilità all'indietro.


3

Ho fatto un confronto approssimativo del codice sorgente e non ci sono cambiamenti seri. Sono stati aggiunti molti commenti org.junit.Asserte sono stati fatti alcuni refactoring. L'unica modifica è il confronto con Arrays. Ci sono alcune ripuliture del codice, ma non c'è (imho) nessun cambiamento funzionale .


1
Credo che @ David Moles sia corretto e questo sarebbe un cambiamento funzionale.
orbfish,

1

In Android Studio (e quindi anche in IntelliJ), puoi escludere globalmente junit.frameworkdalla proposta di importazione automatica.

È possibile impostare l'ambito tra IDEo Project. Se non si hanno progetti che utilizzano JUnit 3, è possibile rimanere in sicurezza con l'ambito IDE.

Posizione di impostazione:

Preferenze -> Editor -> Generale -> Importazione automatica

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.