Я использую и то, и другое время от времени, но согласно документам:
Сообщает об ошибке , идентифицированной , $message
если две переменные $expected
и $actual
не имеют одинаковый тип и значение «.
И, как вы можете видеть в примере ниже приведенного выше отрывка, они передают '2204'
и 2204
, которые не будут использоваться, assertSame
потому что один - это, string
а другой - в int,
основном:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
«Сообщает об ошибке, идентифицированной $ message, если две переменные $ expected и $ actual не равны».
assertEquals
похоже, не принимает во внимание тип данных, поэтому, используя приведенный выше пример 2204
:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
Я просто провел несколько модульных тестов для приведенных выше примеров, и они действительно привели к задокументированному поведению.
'0012' == '12'
. Даже если оба значения являются строками, они преобразуются в целые числа для сравнения! Вы действительно должны использовать assertSame всякий раз, когда можете.assertSame()
. Сообщает об ошибке, идентифицированной $ message, если две переменные $ expected и $ actual не ссылаются на один и тот же объект. phpunit.de/manual/current/en/…Что касается сравнения объектов:
assertSame: может только утверждать, если 2 объекта ссылаются на один и тот же экземпляр объекта. Таким образом, даже если два отдельных объекта имеют для всех своих атрибутов одинаковые значения, assertSame завершится ошибкой, если они не ссылаются на один и тот же экземпляр.
assertEquals: может утверждать, соответствуют ли 2 отдельных объекта своим значениям атрибутов в любом случае. Итак, это метод, подходящий для подтверждения соответствия объекта.
https://phpunit.de/manual/current/en/appendixes.assertions.html
источник
assertEquals()
сравниваетnull
и""
даже0
как равные.Первый пройдет!
Второй выйдет из строя.
Вот в чем разница.
Я думаю, вам всегда следует использовать assertSame.
источник
Как было сказано ранее,
AssertSame
сообщает об ошибке, если два элемента не имеют общего типа и значения, но также важно отметить это в документации :Таким образом, этот тест тоже не пройдет, даже если у них общий тип и значение:
источник
Более того,
источник
assertSame () == Проверяет, совпадают ли фактический результат и ожидаемый параметр.
то есть :
или
assertEquals == Если мы видим, что касается страницы веб-сайта, у меня есть страница с двумя «таблицами», поэтому, когда я запускаю assertEquals, я проверю его счетчик, что «таблица» равна 2, с помощью функции подсчета. Например:
Здесь мы видим, что assertEquals проверяет наличие 2 таблиц на веб-странице. мы также можем использовать подразделения, найденные на странице, используя '#division name' внутри скобок.
Например, 2:
источник
#
разметки, если вы не хотите сделать заголовок.Как упоминалось ранее,
assertEquals()
в первую очередь речь идет об интерпретируемом значении, будь то манипуляция типом или объект с методом представления __magic (__toString()
например).Хороший вариант использования
assertSame()
- это тестирование одноэлементной фабрики.источник