作者:手机用户2602919763 | 来源:互联网 | 2023-01-18 20:52
我开始在这个项目中使用单元和功能测试,因此我有一些问题:
我正在使用symfony php框架.我有像LDAP ORM服务这样的学说.
此外,我有一个用户存储库(作为服务),它依赖于LDAP ORM服务,记录器和验证服务.
现在我想为UserRepo的addUser函数编写单元测试.它将在内部调用:getNewUidNumber,userToEntities,doUserExist和getUserByUid.
我的问题是:我是否应该模拟所有这些内部函数来测试addUser函数?这是否违背了单元测试的想法(只是测试API).
或者我应该只是模拟LDAP ORM服务,Logger和验证服务,以便该类调用所有内部函数?但是这会导致巨大的测试功能,并且需要进行大量的模拟,因为我必须模拟所有内部存储库调用的存储库.
或者我应该启动symfony内核并使用ServiceContainer将ORM LDAP服务与真实的测试数据库一起使用.但这不是功能测试而不是单元测试吗?我听说在测试中有这么多依赖项是不好的.所以我认为使用整个serviceContainer会很糟糕.
添加用户:
public function addUser(User $user)
{
$pbnlAccount = $this->userToEntities($user);
if(!$this->doesUserExist($user)) {
$pbnlAccount->setUidNumber($this->getNewUidNumber());
$this->ldapEntityManager->persist($pbnlAccount);
$this->ldapEntityManager->flush();
}
else {
throw new UserAlreadyExistException("The user ".$user->getUid()." already exists.");
}
return $this->getUserByUid($user->getUid());
}
有关更多代码,例如内部函数:https:
//gist.github.com/NKPmedia/4a6ee55b6bb96e8af409debd98950678
谢谢保罗