用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
答案 0 :(得分:4)
+1这是一个很好的问题。
我必须在PHP文档中查找答案:http://www.phpunit.de/manual/3.4/en/api.html
没有为XML Element对象定义Equality,因此只有当两个对象具有相同的标识(是同一个对象)时,$this->assertTrue($xml_1==$xml_2);
才会成功。
相比之下, assertEquals 试图变得聪明,并根据对象类型进行特殊处理。在XML的情况下,它比较XML元素的结构和内容,如果它们具有相同的语义含义,则返回True,尽管它们是不同的对象。