PHPUnit只测试一些参数

时间:2015-12-07 14:25:46

标签: php unit-testing phpunit

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

我可以测试$ param1进行验证吗?

我的意思是模仿方法,所以在验证$ param2时,它总是会返回TRUE。 所以它只是验证$ param1 ..
它能够做到吗?

2 个答案:

答案 0 :(得分:0)

如果验证$ param1没有通过验证$ param2(不依赖),我会重构你的公共API看起来像这样。

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

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

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

答案 1 :(得分:0)

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

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

如果这很烦人,因为除了在同一方法中验证之外,这两个参数没有任何共同之处,这对于设计糟糕的代码来说是一个真实的标志。如果测试某些东西很烦人,那么使用该代码也很烦人。

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

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