Używam obu sporadycznie, ale zgodnie z dokumentacją:
Zgłasza błąd identyfikowany przez $message
Jeśli dwóch zmiennych $expected
i $actual
nie mają tego samego typu i wartości .”
I jak widać na poniższym przykładzie w powyższym fragmencie, przechodzą '2204'
i 2204
, co nie powiedzie się, assertSame
ponieważ jeden jest a, string
a jeden jest w int,
zasadzie:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
„Zgłasza błąd identyfikowany przez $ message, jeśli dwie zmienne $ oczekiwane i $ rzeczywiste nie są równe.”
assertEquals
nie wydaje się brać pod uwagę typu danych, więc skorzystaj z powyższego przykładu 2204
:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
Właśnie przeprowadziłem kilka testów jednostkowych z powyższymi przykładami i rzeczywiście spowodowały one udokumentowane zachowanie.
'0012' == '12'
. Nawet jeśli obie wartości są łańcuchami, do porównania są konwertowane na liczby całkowite! Powinieneś naprawdę używać assertSame, kiedy tylko możesz.assertSame()
. Zgłasza błąd identyfikowany przez $ message, jeśli dwie zmienne $ spodziewane i $ rzeczywiste nie odnoszą się do tego samego obiektu. phpunit.de/manual/current/en/…Jeśli chodzi o porównanie obiektów:
assertSame: może potwierdzić tylko wtedy, gdy 2 obiekty odwołują się do tej samej instancji obiektu. Więc nawet jeśli 2 oddzielne obiekty mają dla wszystkich atrybutów dokładnie te same wartości, assertSame zakończy się niepowodzeniem, jeśli nie będą odwoływać się do tej samej instancji.
assertEquals: może potwierdzić, jeśli 2 oddzielne obiekty pasują do ich wartości atrybutów w każdym przypadku. Jest to więc metoda odpowiednia do zapewniania zgodności obiektów.
https://phpunit.de/manual/current/en/appendixes.assertions.html
źródło
assertEquals()
porównujenull
a""
nawet0
jako równe.Pierwszy minie!
Drugi zawiedzie.
To jest różnica.
Myślę, że zawsze powinieneś używać assertSame.
źródło
Jak powiedziano wcześniej,
AssertSame
zgłasza błąd, jeśli te dwa elementy nie mają wspólnego typu i wartości, ale ważne jest również, aby zanotować to z dokumentacji :Więc ten test również się nie powiedzie, mimo że mają wspólny typ i wartość:
źródło
Ponadto,
źródło
assertSame () == Sprawdza, czy rzeczywiste dane wyjściowe i oczekiwany parametr są takie same.
to jest :
lub
assertEquals == Jeśli widzimy w odniesieniu do strony internetowej, mam stronę, która ma 2 'tabele', więc kiedy uruchomię assertEquals, sprawdzę liczbę, że 'table' są 2 za pomocą funkcji count. Na przykład:
Tutaj widzimy, że assertEquals sprawdza, czy na stronie internetowej znajdują się 2 tabele. możemy również użyć podziałów znalezionych na stronie, używając w nawiasie '#division name'.
Np. 2:
źródło
#
znaczników, chyba że chcesz utworzyć nagłówek.Jak wcześniej wspomniano,
assertEquals()
dotyczy przede wszystkim wartości interpretowanej, czy to poprzez żonglowanie typami, czy też obiektu z metodą prezentacji __magic (__toString()
na przykład).Dobrym przypadkiem użycia
assertSame()
jest testowanie pojedynczej fabryki.źródło