Я предполагаю, что ваш микросервис - это класс, который зарегистрирован в служебном контейнере Laravel. Насколько я знаю, вы не можете макетировать классы вне контейнера в Laravel.
Так что, если вы этого не делаете, зарегистрируйте сервис в контейнере в классе AppServiceProvider
. И получите микросервис из контейнера в контроллере. Подробнее см. Здесь .
. В своем модульном тесте вы можете создать макет объекта вашего микросервиса в соответствии с вашими потребностями и вставить его в контейнер (заменив реальный). например
$this->instance(MyMicroService::class, Mockery::mock(MyMicroService::class, function ($mock) {
// here you tell the mock object which method will be called and what to return and how many times it will be called. it's totally customizable.
$mock->shouldReceive('contactRemoteServer')->once()->andReturnTrue();
}));
и это проще, если вы используете метод mock в своем классе тестового набора, но он делает то же самое:
$this->mock(MyMicroService::class, function ($mock) {
$mock->shouldReceive('contactRemoteServer')->once()->andReturnTrue();
});
см. Документы для получения дополнительной информации Примеры.
NB: Если вы не знаете, фиктивный класс - это класс, созданный специально для теста, поэтому он не влияет на результаты и должен быть управляемым в соответствии с тестом. needs.
Например, если вы хотите, чтобы ваш микросервис выдавал исключение, и вы хотите проверить ответ контроллера, для этого вам нужно будет создать фиктивный класс для каждого модульного теста.