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