在 PHPUnit 中模拟和注入静态方法
Mock and inject static method in PHPUnit
我想使用 PHPUnit 对以下函数进行单元测试。
use Requests;
class Some_Class {
public function some_function_i_want_to_test() {
$my_requests = [];
// some code to create my_requests
$responses = Requests::request_multiple( $my_requests );
return $responses;
}
}
如何为 Requests::request_multiple
模拟和注入存根?
我开始于:
private function mock_requests() {
$requests_mock = $this->getMockBuilder( Requests::class )
->disableOriginalConstructor()
->setMethods( [ 'request_multiple' ] )
->getMock();
$requests_mock->method( 'request_multiple' )->willReturn( 'response body' );
}
但我不确定如何模拟静态方法或如何将其注入我的 class。
您不能注入静态内容,因为您没有使用实例来访问该方法。
针对您的情况的解决方法是为该静态调用构建一个包装器 class:
class RequestWrapper
{
public function request_multiple($yourParam) {
return Request::request_multiple($yourParam);
}
}
然后您可以在要测试的 method/class 中注入此 class 的一个实例,并在适当的时候模拟它。
我想使用 PHPUnit 对以下函数进行单元测试。
use Requests;
class Some_Class {
public function some_function_i_want_to_test() {
$my_requests = [];
// some code to create my_requests
$responses = Requests::request_multiple( $my_requests );
return $responses;
}
}
如何为 Requests::request_multiple
模拟和注入存根?
我开始于:
private function mock_requests() {
$requests_mock = $this->getMockBuilder( Requests::class )
->disableOriginalConstructor()
->setMethods( [ 'request_multiple' ] )
->getMock();
$requests_mock->method( 'request_multiple' )->willReturn( 'response body' );
}
但我不确定如何模拟静态方法或如何将其注入我的 class。
您不能注入静态内容,因为您没有使用实例来访问该方法。
针对您的情况的解决方法是为该静态调用构建一个包装器 class:
class RequestWrapper
{
public function request_multiple($yourParam) {
return Request::request_multiple($yourParam);
}
}
然后您可以在要测试的 method/class 中注入此 class 的一个实例,并在适当的时候模拟它。