assertEquals и assertTrue дают разные результаты для тех же переменных - PullRequest
6 голосов
/ 20 ноября 2011

Как проверено с phpunit:

$xml_1 = new SimpleXMLElement('<name>Bugs</name>');
$xml_2 = new SimpleXMLElement('<name>Bugs</name>');

$this->assertEquals($xml_1, $xml_2);    // Passes
$this->assertTrue($xml_1==$xml_2);      // Fails

Хм, что?

РЕДАКТИРОВАТЬ: Нет, это не глупый вопрос.В Python:

import unittest
class TestEqualityIdentity(unittest.TestCase):
def test_equality(self):
    x   =   1
    y   =   1
    self.assertTrue(x==y)       # Passes
    self.assertEqual(x, y)      # Passes
if __name__ == '__main__':
    unittest.main()

Нет причин, по которым PHP должен вести себя как Python.Но это не глупый вопрос и в PHP.

$x = 1;
$y = 1;
$this->assertEquals($x, $y);        //  Passes
$this->assertTrue($x==$y);          //  Passes

РЕДАКТИРОВАТЬ 2 Ответ Рэймонда ниже верен, не говоря уже о том, что на момент написания этой статьи он на 3 голоса ниже.

FWIW, япотребовалось сравнение значений текстовых узлов двух объектов XML в тесте if и получить его путем приведения их к строкам.

$this->assertTrue((string) $xml_1== (string) $xml_2); // Passes, works in if test

// Note that simply referring to a SimpleXMLElement _seems_ to give its 
// text node.  

$this->assertEquals($xml_1, 'Bugs');  // Passes

// This seemed weird to me when I first saw it, and I can't 
// say I like it any better now

1 Ответ

4 голосов
/ 20 ноября 2011

+ 1 Это отличный вопрос.

Мне пришлось искать в документации по PHP ответы: http://www.phpunit.de/manual/3.4/en/api.html

Равенство не определено для объектов XML-элементов, поэтому$this->assertTrue($xml_1==$xml_2); будет успешным, только если два объекта имеют одинаковую идентичность (являются одним и тем же объектом).

Напротив, assertEquals пытается быть умным и имеет особую обработку случая в зависимости от типа объекта,В случае XML он сравнивает структуру и содержимое элементов XML, возвращая True, если они имеют одинаковое семантическое значение, даже если они являются отдельными объектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...