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 类似于具有多个字段的表单,以及两个可以轻松重复使用的单独验证器。
例如,
如果有方法
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 类似于具有多个字段的表单,以及两个可以轻松重复使用的单独验证器。