📌  相关文章
📜  PHP 单元 | assertEquals()函数(1)

📅  最后修改于: 2023-12-03 15:33:36.992000             🧑  作者: Mango

PHP 单元 | assertEquals()函数

简介

在进行单元测试时,assertEquals()函数是一个常用的断言函数。该函数用于比较两个值是否相等,如果不相等则测试失败。该函数的详细参数如下:

void assertEquals(  $expected,  $actual,  $message = '',  $delta = 0.0,  $maxDepth = 10,  $canonicalize = false,  $ignoreCase = false);

参数说明:

  • $expected: 期望的值,可以是任意数据类型。
  • $actual: 实际的值,可以是任意数据类型。函数将比较$expected和$actual的值,如果不相等,则测试失败。
  • $message: [可选] 当测试失败时,将打印此消息,以便更容易地确定问题所在。
  • $delta: [可选] 用于比较浮点数的误差范围。
  • $ignoreCase: [可选] 在比较字符串的时候是否忽略大小写,默认值为false。
  • $maxDepth: [可选] 比较数组、对象、资源、Closure和Generator时,最大深度,默认值为10。
  • $canonicalize: [可选] 对比数组、对象、Closure和Generator时是否使用canonicalizing算法,此算法将对比按照键的顺序进行,并且在比对之前会按照键值对进行排序。
使用示例
基本示例

以下是一个基本的单元测试用例,在该用例中,我们比较了一个数字和一个字符串,并期望它们不相等:

public function test_sample()
{
  $num = 42;
  $str = "42";
  $this->assertEquals($num, $str, "数字和字符串不应该相等");
}

如果运行该用例,代码将失败,并输出以下消息:

数字和字符串不应该相等
Failed asserting that '42' matches expected 42.
比较浮点数

当比较浮点数时,我们可能会发现它们不总是精确相等。在这种情况下,我们可以使用$delta参数指定误差范围,以容忍浮点数的一定程度的不同:

public function test_float()
{
  $num = 3.1415926;
  $pi = M_PI;
  $delta = 0.0001;
  $this->assertEquals($num, $pi, "浮点数精度不相等", $delta);
}
比较数组

可以将$expected和$actual值设置为数组,并通过$canonicalize来控制数组的比较方式:

public function test_array()
{
  $arr1 = [1, 2, 3];
  $arr2 = [3, 2, 1];
  $msg = "数组不相等";
  $this->assertEquals($arr1, $arr2, $msg, 0, 10, true);
}
比较对象

可以将$expected和$actual值设置为对象,并通过$canonicalize来控制对象的比较方式:

public function test_object()
{
  $obj1 = new stdClass();
  $obj1->name = "John";
  $obj1->age = 30;

  $obj2 = new stdClass();
  $obj2->age = 30;
  $obj2->name = "John";

  $msg = "对象不相等";
  $this->assertEquals($obj1, $obj2, $msg, 0, 10, true);
}
结论

assertEquals()函数是PHP单元测试中常用的测试函数,可以用来比较各种类型的值,包括数字、字符串、数组和对象等。使用该函数可以方便地进行单元测试,并确保代码质量。