diferencias entre 2 clases JUnit Assert

257

El marco JUnit contiene 2 Assertclases (en diferentes paquetes, obviamente) y los métodos en cada uno parecen ser muy similares. ¿Alguien puede explicar por qué es esto?

Las clases a las que me refiero son: junit.framework.Asserty org.junit.Assert.

Dónal
fuente
8
En Intellij IDEA, puede excluir junit.framework.*del menú desplegable de importación estática en Editor->General->Auto Import->Exclude from Import and Completion.
jordanpg

Respuestas:

239

El antiguo método (de JUnit 3) era marcar las clases de prueba extendiéndolas junit.framework.TestCase. Eso se heredó a junit.framework.Assertsí mismo y su clase de prueba ganó la capacidad de llamar a los métodos de aserción de esta manera.

Desde la versión 4 de JUnit, el marco se utiliza Annotationspara marcar pruebas. Entonces ya no necesitas extender TestCase. Pero eso significa que los métodos de afirmación no están disponibles. Pero puede hacer una importación estática de la nueva Assertclase. Es por eso que todos los métodos de aserción en la nueva clase son métodos estáticos. Para que pueda importarlo de esta manera:

import static org.junit.Assert.*;

Después de esta importación estática, puede usar estos métodos sin prefijo.

En el rediseño, también se trasladaron al nuevo paquete org.junitque sigue mejor las convenciones normales para nombrar paquetes.

Mnementh
fuente
66
Esta respuesta no es del todo correcta, puede realizar importaciones estáticas de métodos en la clase junit.framework.Assert y org.junit.Assert. Sin embargo, probablemente sea una buena idea atenerse a la clase org.junit.Assert, ya que es más nueva, ligeramente reescrita y probablemente sea un reemplazo.
Glenn Bech
75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Prefiere el más nuevo, especialmente cuando se ejecuta JDK5 y superior con soporte de anotación.

ReneS
fuente
19

De hecho, hay un cambio funcional: org.junit.Assertse quejará si usa los dos argumentos assertEquals()con floato double, mientras que junit.framework.Assertlo silenciará automáticamente.

David Moles
fuente
5

Creo que están refactorizando de junit.frameworka org.junity junit.framework.Assertse mantiene por compatibilidad con versiones anteriores.

sblundy
fuente
3

Hice una comparación aproximada del código fuente y no hay cambios serios. Se agregaron muchos comentarios org.junit.Asserty se realizaron algunas refactorizaciones. El único cambio es la comparación con Arrays. Hay algunas limpiezas de código, pero (en mi humilde opinión) no hay cambio funcional .

guerda
fuente
1
Creo que @David Moles es correcto, y esto sería un cambio funcional.
orbfish
1

En Android Studio (y también en IntelliJ), puede excluir globalmente junit.frameworkde la propuesta de importación automática.

Puede establecer el alcance entre IDEo Project. Si no tiene proyectos que usen JUnit 3, puede permanecer con seguridad con el alcance IDE.

Posición de ajuste:

Preferencias -> Editor -> General -> Importación automática

ingrese la descripción de la imagen aquí

MatPag
fuente