【问题标题】:Why are specific asserts better than generic asserts, in PHPUnit?为什么在 PHPUnit 中特定断言比通用断言更好?
【发布时间】:2012-10-15 23:43:38
【问题描述】:

请原谅我的无知;我还是单元测试领域的新手。

谁能解释一下原因..

$this->assertGreaterThan( 2, $result );

..优于..

$this->assertTrue( $result > 2 );

..(以及所有其他特定的断言方法)?

谢谢!

【问题讨论】:

    标签: unit-testing testing phpunit


    【解决方案1】:

    如果您向您的妈妈/爸爸/叔叔展示这些,assertGreaterThan 会更加直观。加上 isGreaterThan 的失败消息会好很多

    "1 was not greater than 2"
    

    "false was not true"
    

    哪一个更表现力

    【讨论】:

    • 谢谢马丁。另外,我应该补充一下我的一个朋友提到的:“这些库是可扩展的,所以如果出于某种原因您希望所有 GreaterThan 检查都做一些特别的事情,那么只需扩展和定义您自己的例程即可。”跨度>
    【解决方案2】:

    实际上,最佳方法提供更好的可读性更好的失败消息:使用PHPUnit function-based assertionsHamcrest 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
    

    【讨论】:

    • Hamcrest 看起来不错。我肯定会认真看待这件事。根据您的经验,Hamcrest 会影响 PHPUnit 扩展吗?谢谢
    • @Spot - 我们已经一起使用它们两年多了,没有任何问题。要让 PHPUnit 计算执行的断言数量,您需要使用覆盖 runBarecustom test case。如果您已经像我们一样拥有自己的抽象测试用例,那么添加它很简单。
    【解决方案3】:

    比...更好

    谁这么说的?两者都一样好。两种情况下的可读性都不同,但都不是特别好。您可以通过一些变量提取进一步改进它:

    $minimumValue = 2;
    $this->assertGreaterThan($minimumValue, $result);
    

    $resultGreaterThanMinimumValue = $result > 2;
    $this->assertTrue($resultGreaterThanMinimumValue);
    

    这仍然不理想(因为这些断言读起来不像英文句子),但这两种方法都不是更好。

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 2019-11-15
      • 2016-09-14
      • 2018-05-10
      • 2011-01-26
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      相关资源
      最近更新 更多