2015-12-07 57 views
0

例如, 如果有方法
public function validate($param1, $param2) { // validate $param1 // validate $param2 } PHPUnit的测试只有部分参数

我可以测试$参数1被验证?

我的意思是这样嘲讽的方法,以便验证$参数2时,总是返回TRUE .. 所以它只是验证$参数1 ..
是不是能够做到这一点?

+4

PHPUnit测试___你的代码,如果你的代码依赖于两个参数,那么这就是你测试的:如果你想测试一个参数,那么你写你的代码接受一个参数.....嘲笑方法根本不会测试它 –

回答

0

别拿自己的代码,即将进行测试。

如果你写了一个需要两个参数的方法,而且将支持他们,你必须为每个测试提供两个值。

如果这很讨厌,因为这两个参数没有什么共同点,除了相同的方法被验证,这是一个设计糟糕的代码的真正标志。如果测试某些东西很烦人,那么使用该代码可能也很麻烦。

把这些提示为任务,以提高代码。如果你有两个可以单独验证的绝对独立的值,那就分开它们。为他们中的每一个都提供验证类,在那里彻底测试验证。然后有另一个接受这两个验证器的类,并通过一次方法调用来测试,第一个参数传递给第一个验证器(mocked!),第二个参数传递给第二个验证器(也被模拟)。完成!

你结束了一个类似类的东西的,多领域的一种形式,并且可以方便地重复使用两个单独的验证。

0

如果$参数1验证是不是用$ param2的验证realted(不依赖),我会重构你的公共API来是这个样子。

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

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

这样你可以验证(和测试)任意数量的参数。