PHPUnit Test 只测试一些参数

PHPUnit Test only some parameters

例如, 如果有方法
public function validate($param1, $param2) { // validate $param1 // validate $param2 }

我可以只测试要验证的 $param1 吗??

我的意思是模拟方法,因此在验证 $param2 时,它将始终 return TRUE.. 所以它只是验证 $param1..
它能做到吗?

如果 $param1 的验证与 $param2 的验证不相关(不依赖),我会重构你的 public API 看起来像这样。

private function validateSingleParam($aParam)
{
    // perform $aParam validation
}

public function validate($params)
{
    foreach ($params as $param) {
        $this->validateSingleParam($param);
    }
}

通过这种方式您可以验证(和测试)任意数量的参数。

不要嘲笑自己即将被测试的代码。

如果您编写的方法需要两个参数并将验证它们,则必须为每个测试提供两个值。

如果这很烦人,因为这两个参数除了在同一方法中进行验证外没有任何共同点,这就是代码设计不当的真正标志。如果测试某些东西很烦人,那么使用该代码也可能很烦人。

将这些提示作为改进代码的任务。如果您有两个可以单独验证的绝对独立的值,那么请将它们分开。对它们中的每一个进行验证 class,在那里彻底测试验证。然后有另一个 class 接受这两个验证器,并测试通过一次调用该方法,第一个参数传递给第一个验证器(模拟!),第二个参数传递给第二个验证器(也模拟) .完成!

您最终得到一个 class 类似于具有多个字段的表单,以及两个可以轻松重复使用的单独验证器。