Введение
Я использую систему с несколькими микросервисами (9+). Каждый отдельный микросервис является экземпляром Laravel.
. Для унификации и централизации частей кодовой базы было создано внешнее частное репо composer общих элементов. К ним относятся модели, интерфейсы, черты, клиенты и т. Д. c. Например, объект User
используется во многих микросервисах.
Этот репозиторий не является установкой Laravel, это просто «некоторый код» и не требует элемента оболочки / исполняемого элемента. Это соответствует стандартной структуре composer (/src/
et c).
У меня есть фрагмент кода, который выполняет некоторую проверку. Для одного из элементов требуется объект User
. Это полностью работает внутри существующей кодовой базы.
Я пытаюсь провести модульное тестирование этого кода, чтобы доказать это. Здесь начинается проблема:
// The class:
namespace Example\Models\Core;
// ... other usual laravel use statements:
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
}
Внутри теста:
// ... other includes:
use Example\Models\Core\User;
class ClientTest extends TestCase
{
public function testUserIssue()
{
// attempt to instantiate an empty user:
$user = new User();
// other items:
}
}
Когда запускаются модульные тесты, это вызывает:
Error: Class 'Illuminate\Foundation\Auth\User' not found
Класс User
расширяется Illuminate\Foundation\Auth\User
. Это внутри папки продавца. Похоже, что он правильно загружен, и автоматический переход по классам в PhPStorm работает, как и ожидалось. Объекты
User
функционируют, как и ожидалось, когда этот репозиторий загружен и используется внутри laravel установки. Все мои другие микросервисы могут использовать объект User
, как и ожидалось
Это сохраняется после composer update / install / dump-autoload.
Для ясности: я просто хочу передать немой User
объект через функцию с подсказкой типа. Все, что требуется, - это одно свойство ($user->name
) внутри этой функции. Никаких поисков в БД или каких-либо других причудливых вещей не требуется.
Использование следующего внутри тоже не помогает:
$user = $this->createMock(User::class)
; $user = $this->createPartialMock(User::class, [])
;
Вопрос 1
Почему этот класс не может быть создан / как его создать
Вопрос 2
Можно ли создать экземпляр класс с игнорированием зависимостей ... По сути, stdClass()
или анонимный класс, который перезаписывает другой объект для целей тестирования?