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

时间:2021-03-24 15:18:37

标签: php phpunit aws-sdk amazon-sqs aws-php-sdk

我正在为发送 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 调用时覆盖该方法。

0 个答案:

没有答案
相关问题