【发布时间】:2021-10-12 01:19:49
【问题描述】:
我有一些类可以创建用户“集成”并使用外部 API 检查 API 凭据:
class IntegrationService
{
public function create(array $params)
{
$api = new IntegrationApi();
if (!$api->checkCredentials($params['api_key'])) {
throw new \Exception('Invalid credentials');
}
// storing to DB
return 'ok'; // just for example
}
}
IntegrationApi 类:
class IntegrationApi
{
public function checkCredentials(string $apiKey): bool
{
// some external api calls
return false; // just for example
}
}
我需要为 IntegrationService 类创建单元测试。在创建测试集成之前,我试图在我的测试中模拟 IntegrationApi 类,但我的测试因该异常而失败......
class TestIntegrationService extends TestCase
{
public function test_create()
{
$service = new IntegrationService();
$this->mock(IntegrationApi::class, function (MockInterface $mock) {
$mock->shouldReceive('checkCredentials')->withArgs(['apiKey'])->once()->andReturnTrue();
});
$res = $service->create(['api_key' => '123']);
$this->assertEquals('ok', $res);
}
}
似乎 IntegrationApi 对象没有按预期模拟,但我不知道为什么。在这种情况下,我是否正确应用了对象模拟?
【问题讨论】:
标签: php laravel unit-testing phpunit mockery