php - 在 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 RequestWrapper
{
public function request_multiple($yourParam) {
return Request::request_multiple($yourParam);
}
}
然后,您可以在要测试的方法/类中注入此类的实例,并在适当时对其进行模拟。
推荐阅读
- python - 递归搜索文件名,直到使用 python 找到文件
- firebase - 无法从其他用户 FirebaseDatabase 获取消息
- excel - Power Query 函数 - 可选参数 - 需要令牌文字
- python - 如何简化将具有某些值的列添加到我的数据框中?
- reactjs - 谷歌身份验证使用反应。如何实现?
- python - 如何将日期时间索引的日期更改为月初
- python - 在 Python 中将 CSV 文件组合成一个数据帧
- jetty - Jetty ResourceCache 与 CachedContentFactory
- python - Python manage.py runserver 错误做 Python Crash Course
- r - 打印屏幕后如何修改按钮输出(R闪亮)?