我正在努力理解如何為這段代碼撰寫單元測驗
$qb = $documentManager->getRepository('Document:Account')->createQueryBuilder();
$qb->remove(\project\Document\Account::class)->field('username')
->equals($userAccount->getUsername())->getQuery()->execute();
這是我試圖模擬這部分的嘗試
$account = new account();
$documentAccount = $this->createMock(documentAccount::class);
$this->dm->expects($this->any())->method('getRepository')
->with($documentAccount)
->willReturn($account);
但是當控制元件到達這部分時,我不斷收到此錯誤。

先感謝您。
PHP 單元:PHPUnit 8.5.21
PHP:PHP 7.2.34
Symfony:Symfony 4.4.18
uj5u.com熱心網友回復:
出現錯誤是因為您沒有模擬 from $documentManager,您的測驗用例顯然必須從它開始。
我曾經測驗過Prophecy但使用本機MockBuilder它是相同的邏輯。考慮到我不知道您的用例正在使用的真正類,所以我讓您大致了解您必須做什么,請看下面的代碼:
$queryBuilder = $this->createMock(QueryBuilder::class);
$documentManager = $this->createMock(DocumentMannager::class);
$documentAccount = $this->createMock(Document::Account);
$documentManager
->expects($this->once())
->method('getRepository')
->with('Document:Account')
->willReturn($documentAccount)
;
$documentAccount
->expects($this->once())
->method('createQueryBuilder')
->willReturn($queryBuilder)
;
$queryBuilder
->expects($this->once())
->method('remove')
->with(\project\Document\Account::class)
->willReturn($queryBuilder)
;
$queryBuilder
->expects($this->once())
->method('field')
->with('username')
->willReturn($queryBuilder)
;
$queryBuilder
->expects($this->once())
->method('equals')
->withAnyParameters()
->willReturn($queryBuilder)
;
$queryBuilder
->expects($this->once())
->method('getQuery')
->willReturn($queryBuilder)
;
$queryBuilder
->expects($this->once())
->method('execute')
;
我們完全模擬原始代碼的每次呼叫
$qb = $documentManager->getRepository('Document:Account')->createQueryBuilder();
$qb->remove(\project\Document\Account::class)->field('username')
->equals($userAccount->getUsername())->getQuery()->execute();
uj5u.com熱心網友回復:
這是我修復它的方法,。這可能對遇到類似問題的人有所幫助
$accountDocumentRepo = $this->getMockBuilder(\project\Document\Account::class)
->disableOriginalConstructor()
->disableOriginalClone()
->disableArgumentCloning()
->disallowMockingUnknownTypes()
->setMethods(['remove','createQueryBuilder','field','equals','getQuery', 'execute'])
->getMock();
$this->tradeDm->expects(self::any())->method('getRepository')->willReturn($accountDocumentRepo);
$accountDocumentRepo->method('createQueryBuilder')->willReturn($accountDocumentRepo);
$accountDocumentRepo->method('remove')->willReturn($accountDocumentRepo);
$accountDocumentRepo->method('equals')->willReturn($accountDocumentRepo);
$accountDocumentRepo->method('field')->willReturn($accountDocumentRepo);
$accountDocumentRepo->method('getQuery')->willReturn($accountDocumentRepo);
$accountDocumentRepo->method('execute')->willReturn($accountDocumentRepo);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/380550.html
