当前位置: 首页 > 知识库问答 >
问题:

断言和断言之间的区别在PHPUnit中相同?

凌善
2023-03-14

PHPUnit包含一个assertEquals()方法,但它也有一个assertSame()方法。乍一看,他们似乎做了同样的事情。

这两者的区别是什么?为什么两者都被指定?

共有3个答案

薛浩言
2023-03-14
$this->assertEquals(3, true);
$this->assertSame(3, true);

第一个会通过!

第二个将失败。

这就是区别。

我认为你应该一直使用assertSame。

陆子航
2023-03-14

在对象比较方面:

仅当两个对象引用同一对象实例时才能断言。因此,即使两个单独的对象的所有属性的值完全相同,assertSame()如果不引用相同的实例,也会失败。

$expected = new \stdClass();
$expected->foo = 'foo';
$expected->bar = 'bar';

$actual = new \stdClass();
$actual->foo = 'foo';
$actual->bar = 'bar';

$this->assertSame($expected, $actual); // FAILS

在任何情况下,如果两个单独的对象匹配其属性值,则可以断言。因此,它是一种适合断言对象匹配的方法。

php prettyprint-override">$this->assertEquals($expected, $actual); // PASSES

参考

雍宇定
2023-03-14

我偶尔使用这两种方法,但根据文档:

如果两个变量的类型和值不相同,则报告由$mail标识的错误。"

正如您在上面摘录的下面的示例中所看到的,它们正在传递'2204'2204,使用assertSame将失败,因为一个是字符串,一个是整数,基本上:

'2204' !== 2204
assertSame('2204', 2204) // this test fails

"如果两个变量$预期和$实际不相等,则报告由$消息标识的错误。"

assertEquals似乎没有考虑数据类型,因此使用上面的2204示例:

'2204' == 2204
assertEquals('2204', 2204) // this test passes

我只是针对上面的例子运行了一些单元测试,事实上,它们产生了记录在案的行为。

 类似资料:
  • 问题内容: 和Swift 之间有什么区别? 他们俩在我看来都一样。在哪种情况下,我们应该使用另一种? 问题答案: 用于测试期间的健全性检查,而用于防范可能发生的事情(如果发生),这意味着您的程序无法合理地进行。 因此,例如,您可以对具有合理结果的计算(例如在一定范围内)进行计算,以快速发现是否有错误。但是,您不希望随此附带它,因为超出范围的结果 可能 是有效的,并且不是至关重要的,因此不应崩溃您的

  • 问题内容: 我需要比较两个值:一个是字符串,另一个是float,因此我将字符串转换为float,然后尝试调用,但这未经授权,我猜不接受float作为参数。 在这种情况下,对我有什么解决方案? 问题答案: 您必须为Floats的断言提供一个增量: 增量是期望值与实际值之间的最大差异(delta),对于这两个数字,仍将其视为相等。

  • 我收到以下错误: 对于我的Junit测试中的这行代码,请注意,

  • 问题内容: 我需要在某个地方修复一些CSS,因为我的文字没有回绕,而如果这是一个非常长的单词,它将无限期地继续下去。 像大多数情况一样,我在CSS文件中尝试了一下,但没有成功。 然后,令我惊讶的是,在Google Chrome开发者工具的建议下,我尝试并解决了我的问题。我对此感到震惊,因此我一直想知道这两者之间的区别,但是在这个主题上我什么也没看到。 此外,我不认为W3没有提及它是有记录的行为。我

  • 问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,

  • 本文向大家介绍Java和C语言之间的区别,包括了Java和C语言之间的区别的使用技巧和注意事项,需要的朋友参考一下 Java和C都是编程世界中最流行的编程语言,由于它们的各种重要特征和特性,这两种语言都在全球范围内被广泛使用。 根据它们的功能,以下是Java和C之间的重要区别 序号 键 爪哇 C 1 介绍了 Java是在引入年份之后以C语言开发的,它是由James Gosling在1995年开发的

  • mocha允许你使用任意你喜欢的断言库,在上面的例子中,我们使用了Node.js的内置的断言模块作为断言。如果能够抛出一个错误,它就能够运行。这意味着你能使用下面的这些仓库,比如: should.js - BDD风格贯穿始终 expect.js - expect()样式断言 chai - expect(),assert()和should风格的断言 better-assert - C风格的自文档化的

  • 在本教程的其余部分,您将看到使用不同类型的断言(如BOOST_HANA_RUNTIME_CHECK和BOOST_HANA_CONSTANT_CHECK)的代码段。 像任何合理的assert宏,它们基本上检查它们给出的条件是否满足。 然而,在异构编程的上下文中,一些信息在编译时是已知的,而其他信息仅在运行时可知。 在上下文中使用的断言的确切类型告诉您所声明的条件是否可以在编译时可知,或者是否必须在运