différences entre 2 classes JUnit Assert

257

Le framework JUnit contient 2 Assertclasses (dans différents packages, évidemment) et les méthodes de chacune semblent très similaires. Quelqu'un peut-il expliquer pourquoi c'est?

Les cours auxquels je fais référence sont: junit.framework.Assertet org.junit.Assert.

Dónal
la source
8
Dans Intellij IDEA, vous pouvez exclure junit.framework.*de la liste déroulante d'importation statique dans Editor->General->Auto Import->Exclude from Import and Completion.
jordanpg

Réponses:

239

L'ancienne méthode (de JUnit 3) consistait à marquer les classes de test en les étendant junit.framework.TestCase. Cela s'est hérité de junit.framework.Assertlui-même et votre classe de test a gagné la capacité d'appeler les méthodes d'assertion de cette façon.

Depuis la version 4 de JUnit, le framework utilise Annotationspour marquer les tests. Vous n'avez donc plus besoin d'étendre TestCase. Mais cela signifie que les méthodes d'assertion ne sont pas disponibles. Mais vous pouvez effectuer une importation statique de la nouvelle Assertclasse. 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 ces méthodes sans préfixe.

Lors de la refonte, ils ont également migré vers le nouveau package org.junitqui suit mieux les conventions normales de dénomination des packages.

Mnementh
la source
6
Cette réponse n'est pas entièrement correcte, vous pouvez effectuer des importations statiques de méthodes dans les classes junit.framework.Assert et org.junit.Assert. Cependant, c'est probablement une bonne idée de s'en tenir à la classe org.junit.Assert car elle est plus récente, légèrement réécrite et probablement destinée à remplacer.
Glenn Bech
75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Préférez le plus récent, en particulier lorsque vous exécutez JDK5 et versions ultérieures avec prise en charge des annotations.

ReneS
la source
19

Il y a en fait un changement fonctionnel: org.junit.Assertse plaindra si vous utilisez les deux arguments assertEquals()avec floatou double, tout junit.framework.Asserten le mettant automatiquement en boîte automatique.

David Moles
la source
5

Je crois qu'ils refactorisent de junit.frameworkà org.junitet junit.framework.Assertsont maintenus pour une compatibilité descendante.

sblundy
la source
3

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 org.junit.Assertet quelques refactorisations sont effectuées. Le seul changement est la comparaison avec Arrays. Il y a quelques nettoyages de code, mais il n'y a (à mon humble avis) aucun changement fonctionnel .

guerda
la source
1
Je crois que @David Moles est correct, et ce serait un changement fonctionnel.
orbfish
1

Dans Android Studio (et donc également dans IntelliJ), vous pouvez exclure globalement junit.frameworkde la proposition d'importation automatique.

Vous pouvez définir la portée entre IDEou Project. Si vous n'avez pas de projets qui utilisent JUnit 3, vous pouvez rester en toute sécurité avec la portée IDE.

Position de réglage:

Préférences -> Éditeur -> Général -> Importation automatique

entrez la description de l'image ici

MatPag
la source