Maison >Java >javaDidacticiel >Pourquoi ne pas fournir la méthode assertNotEquals de JUnit ?

Pourquoi ne pas fournir la méthode assertNotEquals de JUnit ?

黄舟
黄舟original
2016-12-29 09:14:011848parcourir

1. Je suggère les nouvelles assertions de style assertThat(), qui facilitent la description de diverses négations et génèrent automatiquement une description de ce que vous attendez et de ce que vous obtenez si les assertions échouent : assertThat(objectUnderTest,

is(not(someOtherObject)));
assertThat(objectUnderTest, not(someOtherObject));
assertThat(objectUnderTest, not(equalTo(someOtherObject)));

Les trois options sont équivalentes, choisissez celle qui vous semble la plus lisible (et qui permet à cette syntaxe stricte de fonctionner) et vous avez besoin de ces importations :

i

mport static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

2 . Il y a assertNotEquals dans JUnit 4.11 :
3 Je ne sais pas si l'API d'assertions n'est pas très adaptée pour tester les objets qu'elle fournit et bien sûr CodeGo.net, ce n'est pas trop long à écrire :

assertFalse(foo.equals(bar));


Avec cet argument, une partie du rendement est si malheureuse qu'elle devrait être divisée :

String msg = "Expected <" + foo + "> to be unequal to <" + bar +">";
assertFalse(msg, foo.equals(bar));

C'est bien sûr, améliorer le déploiement de assertNotEqual fera probablement partie de JUnit dans le futur : JUnit Numéro 22
4. Je pense que si assertNotEqual est effectivement celui qui rend JUnit un peu moins intéressant à apprendre, gardez à l'esprit que c'est une situation intéressante où l'ajout d'une API réduite aiderait au moins. avec plus d'espace. Je suppose que la raison de l'omission pourrait être qu'il y a trop peu d'appels multijoueurs, cependant, je m'attends à ce que même assertFalse n'existe pas, donc je pourrais finir par ajouter un point positif car ce n'est pas difficile. un, même si j'avoue qu'il existe des solutions de contournement qui sont même élégantes
5 Très tard pour la fête, mais j'ai trouvé que le format suivant :

static void assertTrue(java.lang.String message, boolean condition)

peut fonctionner pour la plupart des « pas égaux ». cas

int status = doSomething() ; // expected to return 123
assertTrue("doSomething() returned unexpected status", status != 123 ) ;

6. C'est mieux pour Hamcrest. Les assertions négatives au lieu de assertFalse afficheront un échec différentiel dans le rapport de test. Si assertFalse, vous n'obtiendrez qu'un rapport des assertions ayant échoué
7. . La raison est que assertNotEquals(). ) sont des commandes intégrées sans les convertir d'abord en objets à part entière : Exemple détaillé :

....
assertThat(1, not(equalTo(Integer.valueOf(winningBidderId))));
....

vs.

assertNotEqual(1, winningBidderId);

8. Cohérence de l'API du module, pourquoi JUnit ne fournit-il pas assertNotEquals(), ce qui est la raison pour laquelle JUnit l'aime toujours assertStringMatchesTheRegex(regex, str) vs assertStringDoesntMatchTheRegex(regex, str) assertStringBeginsWith(prefix, str) vs assertStringDoesntBeginWith(prefix, str) ) c'est-à-dire qu'il n'y a pas de fin pour fournir un type spécifique de quelque chose que vous voudrez peut-être ajouter de la logique à votre argument ! Mieux vaut tester des primitives comme equalTo(...), is(...), not(...), regex(...) et les faire fonctionner ensemble pour plus de lisibilité et de bon sens.

Ce qui précède explique pourquoi la méthode JUnit assertNotEquals n'est pas fournie ? Contenu, pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn