我有以下情况
class User
{
private $id;
private $roleId;
private $role;
public function __construct(int $id, int $roleId)
{
$this->id = $id;
$this->setRoleId($roleId);
}
public function setRoleId(int $roleId)
{
$this->role = Role::load($roleId);
}
}
class Role
{
public function __construct($x, $y ,$z)
{
//...
}
static function load(int $id) : Role
{
// some magic code
return new Role($id);
}
public function getRoleId() : int
{
return $this->role->getId();
}
public function getRole() : Role
{
return $this->role;
}
}
我的问题是,如何对User
-Class进行单元测试?角色类从Web服务加载自身... Stub或Mock不适合(我想),因为要模拟的对象适合Role
并且我正在User
此处测试-Class。
欢迎任何想法
/ BR
菲利普
在这种情况下,您要让您的User
课程负责加载角色。通常,这不是您User
班的责任。相反,您可以例如setRole(Role $role)
在User
类上定义一个函数,该函数接受realRole
或false / stub / mock / whatever Role
,而不接受用户ID。然后,在实际使用用户对象的功能/代码中完成角色的检索。
但是,然后如何测试该课程呢?
在单元测试中,通常不依赖像您这样的静态方法会更容易Role::load
。相反,您可以使用非静态方法。然后,您可以编写一个extends类,该类可以Role
执行您希望在测试期间执行的操作。然后,您还可以编写一些东西来检查您指示它是否完成。
这就是为什么通常不鼓励使用许多静态方法的原因:因为很难测试(使用)它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句