J'utilise les deux sporadiquement, mais selon la documentation:
Signale une erreur identifiée par $message
si les deux variables $expected
et $actual
n'ont pas le même type et la même valeur . "
Et comme vous pouvez le voir dans l'exemple ci-dessous l'extrait ci-dessus, ils passent '2204'
et 2204
, ce qui échouera assertSame
car on est un string
et un est int,
fondamentalement:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
"Signale une erreur identifiée par $ message si les deux variables $ attendu et $ réel ne sont pas égales."
assertEquals
ne semble pas prendre en compte le type de données, donc en utilisant l'exemple ci-dessus de 2204
:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
J'ai juste exécuté quelques tests unitaires par rapport aux exemples ci-dessus, et ils ont effectivement abouti à un comportement documenté.
'0012' == '12'
. Même si les deux valeurs sont des chaînes, elles sont converties en entiers pour la comparaison! Vous devriez vraiment utiliser assertSame chaque fois que vous le pouvez.assertSame()
. Signale une erreur identifiée par $ message si les deux variables $ attendu et $ réel ne font pas référence au même objet. phpunit.de/manual/current/en/…En ce qui concerne la comparaison d'objets:
assertSame: ne peut affirmer que si 2 objets référencent la même instance d'objet. Ainsi, même si 2 objets séparés ont pour tous leurs attributs exactement les mêmes valeurs, assertSame échouera s'ils ne référencent pas la même instance.
assertEquals: peut affirmer si 2 objets séparés correspondent à leurs valeurs d'attribut dans tous les cas. C'est donc la méthode appropriée pour affirmer la correspondance d'objet.
https://phpunit.de/manual/current/en/appendixes.assertions.html
la source
assertEquals()
comparenull
et""
et même0
comme égaux.Le premier passera!
Le second échouera.
Voilà la différence.
Je pense que vous devriez toujours utiliser assertSame.
la source
Comme cela a été dit précédemment,
AssertSame
signale une erreur si les deux éléments ne partagent pas le type et la valeur, mais il est également important de le noter à partir de la documentation :Donc, ce test échouerait également même s'ils partagent le type et la valeur:
la source
De plus,
la source
assertSame () == Teste que si la sortie réelle et le paramètre attendu sont identiques.
C'est :
ou
assertEquals == Si nous voyons par rapport à une page de site Web, j'ai une page qui a 2 'table' donc quand je lance assertEquals je vérifierai son compte que les 'table' sont 2 en utilisant une fonction de comptage. Par exemple:
Ici, nous pouvons voir que assertEquals vérifie qu'il existe 2 tables sur la page Web. nous pouvons également utiliser les divisions trouvées sur la page en utilisant '#division name' à l'intérieur du crochet.
Par exemple 2:
la source
#
balisage sauf si vous souhaitez créer un en-tête.Comme mentionné précédemment, il
assertEquals()
s'agit principalement d'une valeur interprétée, que ce soit par jonglage de type ou un objet avec une méthode de présentation __magic (__toString()
par exemple).Un bon cas d'utilisation pour
assertSame()
tester une usine singleton.la source