Le framework JUnit contient 2 Assert
classes (dans des paquets différents, évidemment) et les méthodes sur chacune semblent très similaires. Quelqu'un peut-il expliquer pourquoi?
Les classes dont je parle 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é junit.framework.Assert
lui-même et votre classe de test ont obtenu la possibilité d'appeler les méthodes d'assertion de cette façon.
Depuis la version 4 de JUnit, le framework utilise Annotations
pour marquer les tests. Vous n’avez donc plus besoin d’allonger TestCase
. Mais cela signifie que les méthodes d'assertion 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. Donc, vous pouvez 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 migré vers le nouveau package org.junit
qui suit mieux les conventions normales pour nommer les paquets.
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 versions supérieures avec prise en charge des annotations.
Il y a en fait un changement fonctionnel: org.junit.Assert
Se plaindra si vous utilisez les deux arguments assertEquals()
avec float
ou double
, tandis que junit.framework.Assert
l'utilisera silencieusement.
Je crois qu’ils refacturent à partir de junit.framework
à org.junit
et junit.framework.Assert
est maintenu pour des raisons de compatibilité avec les versions antérieures.
J'ai fait une comparaison approximative du code source et il n'y a pas de changements sérieux. Beaucoup de commentaires ont été ajoutés dans org.junit.Assert
et quelques refactorings sont faits. Le seul changement est la comparaison avec Arrays
. Il y a quelques nettoyages de code, mais il y a (à mon humble avis) pas de changement fonctionnel.
Dans Android Studio (et donc dans IntelliJ également)), vous pouvez exclure globalement junit.framework
de la proposition d'importation automatique.
Vous pouvez définir la portée entre IDE
ou Project
. Si vous n'avez pas de projets utilisant JUnit 3, vous pouvez rester en toute sécurité avec IDE).
Position de réglage:
Préférences -> Editeur -> Général -> Importation automatique