gpt4 book ai didi

php - assertEquals 和 assertTrue 对相同的变量给出不同的结果

转载 作者:可可西里 更新时间:2023-11-01 13:24:57 24 4
gpt4 key购买 nike

使用 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 这是一个很好的问题。

我不得不在 PHP 文档中寻找答案:http://www.phpunit.de/manual/3.4/en/api.html

没有为 XML 元素对象定义相等性,因此 $this->assertTrue($xml_1==$xml_2); 只有在两个对象具有相同标识(是同一个对象)。

相比之下,assertEquals 试图变得聪明,并根据对象类型进行特殊情况处理。对于 XML,它比较 XML 元素的结构和内容,如果它们具有相同的语义,则返回 True,尽管它们是不同的对象。

关于php - assertEquals 和 assertTrue 对相同的变量给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com