2008-11-14 10 views
234

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

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

+7

En Intellij IDEA, puede excluir 'junit.framework. *' Del menú desplegable de importación estática en 'Editor-> General-> Importación automática-> Excluir de importación y finalización'. – jordanpg

Respuesta

221

El método anterior (de JUnit 3) era marcar las clases de prueba extendiendo junit.framework.TestCase. Eso heredó junit.framework.Assert sí mismo y su clase de prueba ganó la capacidad de llamar a los métodos afirmar de esta manera.

Desde la versión 4 de JUnit, el marco utiliza Annotations para las pruebas de marcado. Entonces ya no necesita extender TestCase. Pero eso significa que los métodos assert no están disponibles. Pero puede hacer una importación estática de la nueva clase Assert. Es por eso que todos los métodos assert de 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 utilizar este método sin prefijo.

En el rediseño, también cambiaron al nuevo paquete org.junit que sigue mejor las convenciones normales para la denominación de paquetes.

+5

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, es probable que sea una buena idea seguir con la clase org.junit.Assert ya que es más reciente, está ligeramente reescrita y probablemente sea un reemplazo. –

5

Creo que están refactorizando desde junit.framework a org.junit y junit.framework.Assert se mantiene por compatibilidad con versiones anteriores.

68

JUnit 3.x: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Prefiero el más nuevo, especialmente cuando se ejecutan JDK5 y superior con el apoyo de anotación.

3

Hice un código fuente aproximado para comparar y no hay cambios serios. Se agregaron muchos comentarios en org.junit.Assert y se realizaron algunas refactorizaciones. El único cambio es la comparación con Arrays. Hay algunas limpiezas de código, pero hay (imho) sin cambio funcional.

+1

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

17

De hecho, hay un cambio funcional: org.junit.Assert se quejará si se utiliza el argumento de dos assertEquals() con float o double, mientras junit.framework.Assert silenciosamente AUTOBOX ella.