如何修改Mockery中Laravel Request模拟对象的类名称?
修改Mockery模拟对象的显示名称
要将Mockery生成的模拟对象名称从Mockery_3_API_V2_Custom_Requests_DestroyRequest改为DestroyRequest,可以通过Mockery的shouldBeNamed()方法实现,具体修改如下:
修改后的代码
protected function setUp(): void { parent::setUp(); $this->model = Mockery::mock(MyModel::class)->makePartial(); $this->destroyRequest = $this->mockRequest(DestroyRequest::class); } private function mockRequest(string $requestClass) { // 创建模拟对象并指定显示名称为类的短名称 $request = \Mockery::mock($requestClass) ->shouldBeNamed(class_basename($requestClass)); $request->shouldReceive('model')->andReturn('MockedModel'); $request->shouldReceive('setModel') ->once() ->with($this->model); return $request; }
原理说明
- Mockery默认会为生成的模拟类添加
Mockery_*前缀的类名,shouldBeNamed()方法可手动指定模拟对象的显示名称,在调试、输出或断言时会使用该名称。 - 使用
class_basename($requestClass)能动态获取类的短名称(比如DestroyRequest::class对应的短名称就是DestroyRequest),避免硬编码类名,提升代码可维护性。
内容的提问来源于stack exchange,提问作者csandreas1
相关产品推荐
相关产品推荐

