如何在PHPUnit中测试带有可调用参数的方法

如何在PHPUnit中测试带有可调用参数的方法,php,unit-testing,oop,phpunit,Php,Unit Testing,Oop,Phpunit,类中有一些私有静态方法。差不多 class Some { … private static function getSome($x) {…} … } 它可以从同一“Some”类的其他公共方法中调用 $a = self::getSuperSome( [__CLASS__, 'getSome'] ); 当我试图换成 $actual = Some::getSuperSome( ['Some', 'getSome'] // Should be changed

类中有一些私有静态方法。差不多

class Some {
    …
    private static function getSome($x) {…}
    …
}
它可以从同一“Some”类的其他公共方法中调用

$a = self::getSuperSome(
    [__CLASS__, 'getSome']
);
当我试图换成

$actual = Some::getSuperSome(
    ['Some', 'getSome'] // Should be changed ?
);
从PHPUnit获取错误

TypeError:传递给App\Some::getSuperSome()的参数blah blah必须是可调用的,数组给定的…'blah blah


如何在PHPUnit的某个测试类中更改args的名称以测试getSuperSame?

首先需要创建任何名称空间,如
名称空间Testnamespace。然后必须将访问修饰符更改为
静态公共函数getSome($x)
。然后您可以在下面的代码中尝试类声明来实现您的输出

call_user_func_array(__NAMESPACE__ .'\Some::getSome', array('Some','getSome'));

单元测试用于测试公共接口,而不是私有/受保护的方法。另外,一开始不应该使用静态方法。我们现在可以在PHP中选择名称空间函数了。@tereško我想测试公共getSuperSome方法。如果我将getSome的可见性更改为public,我会收到相同的错误消息。
[\uuuuu CLASS\uuuuuu,'getSome']
作为可调用项是非常有效的(如果在正确的范围内执行),那么肯定还有其他问题。请考虑提供更多的代码(类似的),请考虑Tyee Ko的评论