Dom*_*Dom 1 phpunit laravel mockery
我有这个测试:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Services\AccessTokenService;
use App\Services\MemberService;
class BranchTest extends TestCase
public function testPostBranchWithoutErrors()
{
$this->mock(AccessTokenService::class, function ($mock) {
$mock->shouldReceive('introspectToken')->andReturn('introspection OK');
});
$this->mock(MemberService::class, function ($mock) {
$mock->shouldReceive('getMemberRolesFromLdap')->andReturn(self::MOCKED_ROLES);
});
Run Code Online (Sandbox Code Playgroud)
如您所见,此测试有 2 个模拟。第二个“MemberService:class”是我当前的问题。此类中有 2 个函数:“createMember”和“getMemberRolesFromLdap”。我精确地说,我只想模拟“getMemberRolesFromLdap”函数。
在文档中,写道:
当你只需要模拟一个对象的几个方法时,可以使用partialMock方法。未被mock的方法在调用时会正常执行:
$this->partialMock(Service::class, function ($mock) { $mock->shouldReceive('process')->once(); });
但是当我使用“partialMock”时,出现以下错误:
错误:调用未定义的方法 Tests\Feature\BranchTest::partialMock()
当我尝试经典模拟(无部分)时,出现以下错误:
收到 Mockery_1_App_Services_MemberService::createMember(),但未指定期望
当然是因为这个类中有 2 个函数,所以 PhpUnit 不知道如何处理函数“createMember”。
接下来我可以尝试什么?我是 PhpUnit 测试的初学者。
Laravel 6.0
PHPUnit 7.5
PartialMock 简写首先在 Laravel 6.2 中添加,请参见发行说明。因此升级到 6.2 应该可以解决您的问题。
其次,您可以将以下代码片段添加到您的Tests\TestCase.php课程中,它应该可以工作。
protected function partialMock($abstract, Closure $mock = null)
{
return $this->instance($abstract, Mockery::mock(...array_filter(func_get_args()))->makePartial());
}
Run Code Online (Sandbox Code Playgroud)
通过升级,类似的东西应该使您能够模拟单个函数。
$mock = $this->partialMock(AccessTokenService::class, function (MockInterface $mock) {
$mock->shouldReceive('introspectToken')->andReturn('introspection OK');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4813 次 |
| 最近记录: |