web-dev-qa-db-fra.com

différences entre 2 classes JUnit Assert

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 .

252
Dónal

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.

235
Mnementh

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.

74
ReneS

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.

19
David Moles

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.

5
sblundy

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.

3
guerda

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

enter image description here

0
MatPag