php 单元测试 麻烦,php – 正确的单元测试
首先,如果可能的話,我想稍微改寫一下這個(gè)方法.
public function addUser(User $user)
{
if ($this->doesUserExist($user)) {
throw new UserAlreadyExistException("The user ".$user->getUid()." already exists.");
}
// ... shortened for brevity
$pbnlAccount = $this->userToEntities($user);
$this->ldapEntityManager->persist($pbnlAccount);
}
另一種相關(guān)方法是:
private function doesUserExist(User $user)
{
$users = $this->ldapRepository->findByUid($user->getUid());
return count($users) === 1;
}
我們馬上就可以看到我們基本上有兩個(gè)測(cè)試:
>我們測(cè)試該方法在用戶存在時(shí)拋出
>如果用戶不存在,我們測(cè)試該方法是否持久存在PbnlAccount.
如果你不明白為什么我們有這兩個(gè)測(cè)試,請(qǐng)注意這個(gè)方法中有兩個(gè)可能的“流”:一個(gè)是if語(yǔ)句中的塊被執(zhí)行,另一個(gè)是不執(zhí)行它.
讓我們解決第一個(gè)問(wèn)題:
public function testAddUserThrowsWhenUserExistsAlready()
{
$user = new User();
$user->setUid('123');
$ldapRepositoryMock = $this->createMock(LdapRepository::class);
$ldapRepositoryMock
->method('findByUid')
->expects($this->once())
->with('123')
->willReturn(new PbnlAccount());
$userRepository = new UserRepository($ldapRepositoryMock);
$this->expectException(UserAlreadyExistException::class);
$userRepository->addUser($user);
}
第二次測(cè)試留給讀者練習(xí):)
是的,你必須在你的情況下做一些嘲弄.在這種情況下,您將需要模擬LdapRepository和LdapEntityManager.
注意1:這段代碼可能不是可運(yùn)行的,因?yàn)槲也恢滥愕拇a庫(kù)的確切細(xì)節(jié)(我把它寫在了我的頭頂),但這不是重點(diǎn).關(guān)鍵是你要測(cè)試異常.
筆記2:
我會(huì)將您的函數(shù)重命名為createNewPbnlAccountForUser(User $user),該函數(shù)更長(zhǎng),但更具描述性.
注3:我不確定你為什么要返回$this-> getUserByUid(),因?yàn)槟撬坪跏嵌嘤嗟?你已經(jīng)有用戶了),所以我省略了這種情況.
總結(jié)
以上是生活随笔為你收集整理的php 单元测试 麻烦,php – 正确的单元测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎样防止家中的油烟污染?
- 下一篇: zabbix前端php界面,zabbix