【发布时间】:2012-10-15 23:43:38
【问题描述】:
请原谅我的无知;我还是单元测试领域的新手。
谁能解释一下原因..
$this->assertGreaterThan( 2, $result );
..优于..
$this->assertTrue( $result > 2 );
..(以及所有其他特定的断言方法)?
谢谢!
【问题讨论】:
标签: unit-testing testing phpunit
请原谅我的无知;我还是单元测试领域的新手。
谁能解释一下原因..
$this->assertGreaterThan( 2, $result );
..优于..
$this->assertTrue( $result > 2 );
..(以及所有其他特定的断言方法)?
谢谢!
【问题讨论】:
标签: unit-testing testing phpunit
如果您向您的妈妈/爸爸/叔叔展示这些,assertGreaterThan 会更加直观。加上 isGreaterThan 的失败消息会好很多
"1 was not greater than 2"
或
"false was not true"
哪一个更表现力?
【讨论】:
实际上,最佳方法提供更好的可读性和更好的失败消息:使用PHPUnit function-based assertions或Hamcrest library。
assertThat(count($users), greaterThan(2));
>> Expected: greater than 2
>> but: was 1
或
assertThat($users, arrayWithSize(greaterThan(2)));
>> Expected: array with size greater than 2
>> but: was array with size 1
您始终可以通过将字符串作为第一个参数添加到断言方法或 Hamcrest 的 assertThat 函数或 PHPUnit 的 assertThat 函数的第三个参数来为任何断言提供可读的错误消息:
self::assertTrue('At least one user found', !empty($users));
>> At least one user found
>> Expected: true
>> but: false
或
assertThat('At least one user found', !empty($users), is(true));
>> At least one user found
>> Expected: true
>> but: false
【讨论】:
runBare 的 custom test case。如果您已经像我们一样拥有自己的抽象测试用例,那么添加它很简单。
比...更好
谁这么说的?两者都一样好。两种情况下的可读性都不同,但都不是特别好。您可以通过一些变量提取进一步改进它:
$minimumValue = 2;
$this->assertGreaterThan($minimumValue, $result);
和
$resultGreaterThanMinimumValue = $result > 2;
$this->assertTrue($resultGreaterThanMinimumValue);
这仍然不理想(因为这些断言读起来不像英文句子),但这两种方法都不是更好。
【讨论】: