几乎所有的 phpUnit 断言都是三个参数:
- 预期结果
- 实际价值
- 失败时打印的可选消息
(有些,例如assertTrue()
,有一个隐含的预期结果,所以只有两个参数。)
但是,如果预期结果不那么干净怎么办?它可能是可选参数,也可能只是需要测试的值不止一个。作为一个具体的例子,我有assertTimestamp($expected_time,$actual_time,$tolerance=0,$msg='')
容忍允许一点时钟漂移的地方。(我还使用它来测试数据库中创建的时间戳,以断言该记录是在过去 30 秒内创建的,即由当前单元测试运行中的前一个函数创建的。)
这看起来合理吗?即总是推$msg
到最后,并保持实际作为第二个参数。assertTag
有一个isHTML
标志,最后出现在 . 之后$msg
。
作为一个更复杂的例子,我有一个函数,它接受一个 json 字符串作为$actual
参数。它运行json_decode
,提取一些值,并检查每个值。我目前有这样的事情:
function assertJsonPersonFromDBResponse($name,$gender,$age,$actual,$expectSomething=false,$msg='')
你会做不同的事情吗?我现在想知道是否最好将所有预期参数(包括可选标志)压缩到第一个参数中,这将是一个关联数组:
function assertJsonPersonFromDBResponse($expected,$actual,$msg='')
...
$this->assertJsonPersonFromDBResponse(array('name'=>'Darren','age'=>21,
'gender'=>'M','expectSomething'=>true),$s);
那感觉更干净。但是对于这种情况是否存在现有的约定?