Ich benutze beide sporadisch, aber laut den Dokumenten:
Meldet einen durch identifizierten Fehler , $message
wenn die beiden Variablen $expected
und $actual
nicht die gleiche haben Art und Wert .“
Und wie Sie im Beispiel unten im obigen Auszug sehen können, vergehen sie '2204'
und 2204
, was bei der Verwendung fehlschlägt, assertSame
weil man ein string
und einer im int,
Grunde ist:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
"Meldet einen durch $ message identifizierten Fehler, wenn die beiden Variablen $ expected und $ actual nicht gleich sind."
assertEquals
scheint den Datentyp nicht zu berücksichtigen, also anhand des obigen Beispiels von 2204
:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
Ich habe gerade einige Unit-Tests mit den obigen Beispielen durchgeführt, und tatsächlich haben sie zu dokumentiertem Verhalten geführt.
'0012' == '12'
. Auch wenn beide Werte Zeichenfolgen sind, werden sie für den Vergleich in Ganzzahlen konvertiert! Sie sollten assertSame wirklich verwenden, wann immer Sie können.assertSame()
. Meldet einen durch $ message identifizierten Fehler, wenn die beiden Variablen $ expected und $ actual nicht auf dasselbe Objekt verweisen. phpunit.de/manual/current/en/…Wenn es um den Objektvergleich geht:
assertSame: Kann nur behaupten, wenn 2 Objekte auf dieselbe Objektinstanz verweisen. Selbst wenn zwei separate Objekte für alle Attribute genau dieselben Werte haben, schlägt assertSame fehl, wenn sie nicht auf dieselbe Instanz verweisen.
assertEquals: Kann bestätigen, ob 2 separate Objekte in jedem Fall mit ihren Attributwerten übereinstimmen. Es ist also die Methode, mit der die Objektübereinstimmung bestätigt werden kann.
https://phpunit.de/manual/current/en/appendixes.assertions.html
quelle
Der erste wird vergehen!
Der zweite wird fehlschlagen.
Das ist der Unterschied.
Ich denke, Sie sollten immer assertSame verwenden.
quelle
Wie bereits erwähnt,
AssertSame
wird ein Fehler gemeldet, wenn die beiden Elemente Typ und Wert nicht gemeinsam haben. Beachten Sie dies jedoch auch in der Dokumentation :Dieser Test würde also auch fehlschlagen, obwohl sie Typ und Wert gemeinsam haben:
quelle
Außerdem,
quelle
assertSame () == Testet, ob die tatsächliche Ausgabe und der erwartete Parameter identisch sind.
das ist :
oder
assertEquals == Wenn wir in Bezug auf eine Website-Seite sehen, habe ich eine Seite, die 2 'Tabelle' hat. Wenn ich assertEquals ausführe, überprüfe ich die Anzahl, dass die 'Tabelle' 2 sind, mithilfe einer Zählfunktion. Z.B:
Hier können wir sehen, dass assertEquals überprüft, ob 2 Tabellen auf der Webseite gefunden wurden. Wir können auch Unterteilungen verwenden, die auf der Seite mit '#division name' in der Klammer gefunden werden.
ZB 2:
quelle
#
Markups, es sei denn, Sie möchten eine Überschrift erstellen .Wie bereits erwähnt,
assertEquals()
handelt es sich in erster Linie um einen interpretierten Wert, sei es durch Typ-Jonglieren oder um ein Objekt mit einer __magischen Präsentationsmethode (__toString()
zum Beispiel).Ein guter Anwendungsfall für
assertSame()
das Testen einer Singleton-Factory.quelle