为 AWS SDK 的 SQS 客户端制作 PHPUnit 模拟

问题描述

我正在为发送 SQS 消息的服务编写 PHPUnit 测试。

单元测试实际上不应向 SQS 发布任何消息。

为了防止这种情况,我使用了 PHPUnit 的 createMock()

use PHPUnit\Framework\TestCase;

class ParallelLambdaTest extends TestCase
{
    protected function setUp(): void
    {
        $sqs_client = $this->createMock(\Aws\Sqs\SqsClient::class)
            ->method('sendMessage')
            ->willReturn(true);
        ...

但是,运行单元测试会退出显示警告:

1) 测试\Lambda\ParallelLambdaTest::testGetHandler

尝试配置无法配置的方法“sendMessage” 因为它不存在,没有被指定,是最终的,或者是 静态

如何模拟 SqsClient::sendMessage()


我目前的发现:

SqsClient::sendMessage 使用 Aws\Api\Service\AwsClientTrait::__call() 调用,后者获取 Aws\Command 并分别使用 AwsClient::getCommand()AwsClientTrait::execute() 执行。

模拟 __call 方法有效,但理想情况下,我只想在使用 sendMessage 调用时覆盖该方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)