Eu uso os dois esporadicamente, mas de acordo com os documentos:
Relata um erro identificado por $message
se as duas variáveis $expected
e $actual
não tiverem o mesmo tipo e valor ".
E como você pode ver no exemplo abaixo do trecho acima, eles estão passando '2204'
e 2204
, que falharão em usar assertSame
porque one é a string
e one é int,
basicamente:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
"Relata um erro identificado por $ message se as duas variáveis $ esperado e $ real não forem iguais."
assertEquals
parece não levar em consideração o tipo de dados, portanto, use o exemplo acima de 2204
:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
Acabei de executar alguns testes de unidade nos exemplos acima e, de fato, eles resultaram em comportamento documentado.
'0012' == '12'
. Mesmo se os dois valores forem cadeias, eles serão convertidos em números inteiros para a comparação! Você realmente deve usar assertSame sempre que puder.assertSame()
. Relata um erro identificado por $ message se as duas variáveis $ esperado e $ real não fazem referência ao mesmo objeto. phpunit.de/manual/current/en/…Quando se trata de comparação de objetos:
assertSame: só pode afirmar se 2 objetos estão fazendo referência à mesma instância de objeto. Portanto, mesmo se dois objetos separados tiverem para todos os seus atributos exatamente os mesmos valores, assertSame falhará se eles não fizerem referência à mesma instância.
assertEquals: pode afirmar se 2 objetos separados correspondem aos seus valores de atributo em qualquer caso. Portanto, é o método adequado para afirmar a correspondência de objetos.
https://phpunit.de/manual/current/en/appendixes.assertions.html
fonte
O primeiro vai passar!
O segundo falhará.
Essa é a diferença.
Eu acho que você sempre deve usar assertSame.
fonte
Como já foi dito antes,
AssertSame
relata um erro se os dois elementos não compartilham tipo e valor, mas também é importante observar isso na documentação :Portanto, esse teste também falharia, apesar de compartilharem tipo e valor:
fonte
Além disso,
fonte
assertSame () == Testa se a saída real e o parâmetro esperado são iguais.
isso é :
ou
assertEquals == Se virmos em relação a uma página de site, eu tenho uma página com 2 'tabela'; portanto, quando executo assertEquals, verificarei sua contagem de que a 'tabela' é 2 usando uma função de contagem. Por exemplo:
Aqui podemos ver que assertEquals verifica se há 2 tabelas encontradas na página da web. também podemos usar as divisões encontradas na página usando '#division name' dentro do colchete.
Por exemplo 2:
fonte
#
marcação, a menos que você queira criar um cabeçalho.Como mencionado anteriormente,
assertEquals()
trata-se principalmente de um valor interpretado, seja por tipo de malabarismo ou por um objeto com um método de apresentação __magic (__toString()
por exemplo).Um bom caso de uso
assertSame()
é para testar uma fábrica de singleton.fonte