Le framework JUnit contient 2 classes Assert
(dans des packages différents, évidemment) et les méthodes sur chacun semblent très similaires. Quelqu’un peut-il expliquer pourquoi c’est?
Les classes junit.framework.Assert
je fais référence sont: junit.framework.Assert
et org.junit.Assert
.
L’ancienne méthode (de JUnit 3) consistait à marquer les classes de test en étendant junit.framework.TestCase
. Cela a hérité de junit.framework.Assert
lui-même et de votre classe de test la possibilité d’appeler les méthodes d’ junit.framework.Assert
cette façon.
Depuis la version 4 de JUnit, le framework utilise les Annotations
pour marquer les tests. Vous n’avez donc plus besoin d’étendre TestCase
. Mais cela signifie que les méthodes d’affirmation ne sont pas disponibles. Mais vous pouvez effectuer une importation statique de la nouvelle classe Assert
. C’est pourquoi toutes les méthodes d’assertion de la nouvelle classe sont des méthodes statiques. Vous pouvez donc l’importer de cette façon:
import static org.junit.Assert.*;
Après cette importation statique, vous pouvez utiliser cette méthode sans préfixe.
Lors de la refonte, ils ont également déplacé vers le nouveau package org.junit
qui suit mieux les conventions normales pour le nommage des packages.
JUnit 3.X: junit.framework.Assert
JUnit 4.X: org.junit.Assert
Préférez le plus récent, en particulier lors de l’exécution de JDK5 et supérieur avec prise en charge des annotations.
Il y a en fait un changement fonctionnel: org.junit.Assert
va se plaindre si vous utilisez assertEquals()
à deux arguments avec float
ou double
, alors que junit.framework.Assert
le remplacera silencieusement.
Je crois qu’ils sont en junit.framework
se refacturer de junit.framework
à org.junit
et junit.framework.Assert
est maintenu pour une compatibilité ascendante.
J’ai fait une comparaison approximative du code source et il n’y a pas de changements sérieux. De nombreux commentaires ont été ajoutés dans org.junit.Assert
et certains refactorings sont effectués. Le seul changement est la comparaison avec les Arrays
. Il y a des nettoyages de code, mais il n’y a pas de changement fonctionnel .