Uso ambos esporádicamente, pero de acuerdo con los documentos:
Reporta un error identificado por $message
si las dos variables $expected
y $actual
no tienen el mismo tipo y valor ".
Y como puede ver en el ejemplo debajo del extracto anterior, están pasando '2204'
y 2204
, que fallarán al usarlo assertSame
porque uno es un string
y uno es un int,
básicamente:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
"Reporta un error identificado por $ message si las dos variables $ esperado y $ actual no son iguales".
assertEquals
no parece tener en cuenta el tipo de datos, por lo que se utiliza el ejemplo anterior de 2204
:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
Acabo de ejecutar algunas pruebas unitarias con los ejemplos anteriores y, de hecho, resultaron en un comportamiento documentado.
'0012' == '12'
. Incluso si ambos valores son cadenas, ¡se convierten en números enteros para la comparación! Realmente debería usar assertSame siempre que pueda.assertSame()
. Informa de un error identificado por $ message si las dos variables $ esperado y $ actual no hacen referencia al mismo objeto. phpunit.de/manual/current/en/…Cuando se trata de comparación de objetos:
assertSame: solo se puede afirmar si 2 objetos hacen referencia a la misma instancia de objeto. Entonces, incluso si 2 objetos separados tienen exactamente los mismos valores para todos sus atributos, assertSame fallará si no hacen referencia a la misma instancia.
assertEquals: puede afirmar si 2 objetos separados coinciden con sus valores de atributo en cualquier caso. Entonces es el método adecuado para afirmar la coincidencia de objetos.
https://phpunit.de/manual/current/en/appendixes.assertions.html
fuente
¡El primero pasará!
El segundo fallará.
Esa es la diferencia.
Creo que siempre deberías usar assertSame.
fuente
Como se ha dicho antes,
AssertSame
informa un error si los dos elementos no comparten el tipo y el valor, pero también es importante tener en cuenta esto en la documentación :Entonces, esta prueba también fallaría aunque compartan el tipo y el valor:
fuente
Además,
fuente
asertSame () == Comprueba si la salida real y el parámetro esperado son iguales.
es decir :
o
assertEquals == Si vemos con respecto a la página de un sitio web, tengo una página que tiene 2 'tabla', por lo que cuando ejecuto assertEquals comprobaré su recuento de que la 'tabla' es 2 utilizando una función de recuento. P.ej:
Aquí podemos ver que assertEquals comprueba que hay 2 tablas encontradas en la página web. también podemos usar divisiones que se encuentran en la página usando '#nombre de división' dentro del corchete.
Ej. 2:
fuente
#
marcado a menos que desee crear un encabezado.Como se mencionó anteriormente, se
assertEquals()
trata principalmente de un valor interpretado, ya sea por tipo de malabarismo o un objeto con un método de presentación __magic (__toString()
por ejemplo).Un buen caso de uso para
assertSame()
es probar una fábrica de singleton.fuente