Php 在Laravel之外测试用户模型 介绍

Php 在Laravel之外测试用户模型 介绍,php,laravel,unit-testing,Php,Laravel,Unit Testing,我正在运行一个包含多个微服务(9+)的系统。每个都是独立的微服务是Laravel的一个实例 为了统一和集中部分代码库,创建了一个共享元素的外部私有编写器repo。这些包括模型、界面、特征、客户端等。例如,User对象在许多微服务中使用 此repo不是Laravel安装,它只是“一些代码”,不需要包装器/可执行元素。它遵循标准的composer结构(/src/等) 我有一段代码可以进行一些验证。其中一个元素需要用户对象。这完全可以在现有的代码库中工作 我试图对这段代码进行单元测试以证明这一点。问题

我正在运行一个包含多个微服务(9+)的系统。每个都是独立的微服务是Laravel的一个实例

为了统一和集中部分代码库,创建了一个共享元素的外部私有编写器repo。这些包括模型、界面、特征、客户端等。例如,
User
对象在许多微服务中使用

此repo不是Laravel安装,它只是“一些代码”,不需要包装器/可执行元素。它遵循标准的composer结构(
/src/
等)

我有一段代码可以进行一些验证。其中一个元素需要
用户
对象。这完全可以在现有的代码库中工作

我试图对这段代码进行单元测试以证明这一点。问题就从这里开始:


//班级:
名称空间示例\模型\核心;
// ... 其他常用的laravel使用声明:
使用Illumb\Foundation\Auth\User作为可验证的;
类用户扩展可验证的
{
}
测试内部:


// ... 其他包括:
使用示例\模型\核心\用户;
类ClientTest扩展了TestCase
{
公共函数testUserIssue()
{
//尝试实例化空用户:
$user=新用户();
//其他项目:
}
}
运行单元测试时,这会导致:

错误:找不到类“lightlight\Foundation\Auth\User”

User
类扩展了
illighted\Foundation\Auth\User
。这在供应商文件夹中。它看起来是正确的自动加载,PhPStorm的“点击”自动类跳转按预期工作

User
在laravel安装中加载并使用此回购时,对象按预期运行。我的所有其他微服务都可以按预期使用
User
对象

在composer更新/安装/转储自动加载后,这种情况仍然存在

需要明确的是:我只想将一个哑
User
对象传递给一个类型提示函数。只需此函数中的一个属性(
$user->name
)。不需要数据库查找或其他花哨的东西

在内部使用以下命令也会失败:

  • $user=$this->createMock(user::class)
  • $user=$this->createPartialMock(用户::类,[])
问题1 为什么这个类不能被实例化/我如何实例化这个类

问题2 是否可以实例化具有忽略依赖项的类。。。本质上是一个
stdClass()
或为测试目的覆盖另一个对象的匿名类?

关于问题1: 我能够使用
include()
手动加载该类。这并不令人满意,但让我找到了更合适的解决方案

使用composer拉取单个类/依赖项并没有以PSR-4自动加载所喜欢的方式获得它们

通过用“^7.0”替换单个composer库,内部结构似乎正常工作

这将代码耦合到Laravel,这并不理想,但考虑到这些是Laravel微服务,这是意料之中的。还有比实际需要多得多的代码,这会使供应商文件夹膨胀(如果只用于公共文件repo)

关于问题2:
似乎没有办法。

考虑将您的软件包转换为Laravel软件包,每个软件包都带有it模型、控制器等。有关如何创建软件包,请参阅Laravel文档。此外,该软件包/测试台非常适合测试Laravel软件包。