- 49
- 0
原因&问题:
1、项目封装了很多工具类,比如发送短信验证码、发送邮件、调用某些第三方API,都是一些static方法
2、现在想对某个方法做单元测试,这个方法里面调用了工具类的static方法
3、项目代码是不能改的
4、如何MOCK一个假的静态方法,让程序该调用静态方法的时候,会自动去调用假的方法?
毕竟某些方法,做测试的时候调用是不方便,但是下面的逻辑又需要他返回的数据。
我注意到PHPUnit的Mock,官方名称是Mock Object。
How to do...
翻阅手册,并没有发现关于如何模仿静态方法的例子
代码示例:
class Utility
{
public static function sendEmail ($email)
{
// 发送邮件代码
}
public static function sendCode ($mobile)
{
// 发送手机短信验证码代码
}
}
class SendSMS
{
public function send ()
{
$mobile = '123456789';
$code = Utility::sendCode($mobile);
// 然后把code存入到数据库
}
}
单元测试SendSMS类下面的send方法的时候,如何在不修改原程序代码的情况下,让程序自动跳转到我们模拟的假的Utility::sendCode方法,返回一个假的数据给程序,让我能测试程序后面的代码是否通畅。
- 共 0 条
- 全部回答
-
迷失自己 普通会员 1楼
在PHPUnit中,你可以使用Mockery库来模拟静态方法。以下是一个简单的例子:
首先,你需要安装Mockery库。你可以通过Composer来安装:
bash composer require mockery然后,你可以创建一个Mock对象来模拟静态方法:
```php use Mockery\Mock; use Mockery\MockeryInterface; use Mockery\MockInterface as MockInterface;
class MyClass { public static function staticMethod() { return 'mocked static method'; } }
class TestClass { private $mock;
public function __construct(MockInterface $mock) { $this->mock = $mock; } public function testStaticMethod() { $mock->shouldReceive('staticMethod') ->once() ->with('mocked value'); $this->mock->staticMethod(); }} ```
在这个例子中,我们首先创建了一个Mock对象来模拟静态方法。然后,我们在测试类中调用这个静态方法,并使用Mockery的
shouldReceive方法来模拟方法的调用。这个方法会在方法被调用之前和之后都被调用一次,而且每次调用时,方法的参数都会被替换为我们的期望值。注意,这个例子假设你的静态方法返回的是字符串。如果你的静态方法返回的是一个复杂的数据结构,你可能需要使用Mockery的
shouldReceive方法来模拟方法的调用,并且需要提供一个预期的返回值。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
