PHPUnit包含一个assertEquals方法:https://phpunit.de/manual/current/en/appendixes.assertions.html#appendixes.assertions.assertEquals
它还有一个assertSame方法:https://phpunit.de/manual/current/en/appendixes.assertions.html#appendixes.assertions.assertSame
乍一看,看起来他们做同样的事情.两者有什么区别?他们为什么都指定了?
Mik*_*ell 184
我偶尔使用,但根据文档:
assertSame报告由
$message两个变量标识的错误,$expected并且$actual没有相同的类型和值."
正如你可以在上面摘录下面的例子中看到,他们通过'2204'和2204,这将使用失败assertSame,因为一个是一个string,另一个是int,基本上是:
'2204' !== 2204
assertSame('2204', 2204) // this test fails
Run Code Online (Sandbox Code Playgroud)
assertEquals"如果两个变量$ expected和$ actual不相等,则报告$ message标识的错误."
assertEquals似乎没有考虑数据类型,因此使用上面的示例2204:
'2204' == 2204
assertEquals('2204', 2204) // this test passes
Run Code Online (Sandbox Code Playgroud)
我刚刚针对上面的示例运行了一些单元测试,实际上它们导致了记录的行为.
Gri*_* P. 19
说到对象比较:
assertSame:只能断言2个对象是否引用同一个对象实例.因此,即使两个单独的对象的所有属性具有完全相同的值,assertSame也会失败,如果它们不引用同一个实例.
$expected = new \stdClass();
$expected->foo = 'foo';
$expected->bar = 'bar';
$actual = new \stdClass();
$actual->foo = 'foo';
$actual->bar = 'bar';
$this->assertSame($expected, $actual); FAILS
Run Code Online (Sandbox Code Playgroud)
assertEquals:在任何情况下都可以断言2个独立的对象是否与其属性值匹配.所以这是适合断言对象匹配的方法.
$this->assertEquals($expected, $actual); PASSES
Run Code Online (Sandbox Code Playgroud)
https://phpunit.de/manual/current/en/appendixes.assertions.html
bro*_*man 18
$this->assertEquals(3, true);
$this->assertSame(3, true);
Run Code Online (Sandbox Code Playgroud)
第一个将通过!
第二个将失败.
这就是区别.
我认为你应该总是使用assertSame.
| 归档时间: |
|
| 查看次数: |
56597 次 |
| 最近记录: |