Phpunit использует Zend Framework 3 и доктрину, Mocking не работает

Я использую Zend-тест в ZF3, используя доктрину, когда я запускаю тест для PostController showAction (), он показывает следующую ошибку

$ vendor/bin/phpunit --testsuite Post --stderr
PHPUnit 7.5.2 by Sebastian Bergmann and contributors.

F      1 / 1 (100%)

Time: 169 ms, Memory: 16.00MB

There was 1 failure:

1) PostTest\Controller\PostControllerTest::testIfPostDetailsShownSuccessfully
Failed asserting response code "200", actual status code is "500"
Exceptions raised:
Exception 'TypeError' with message 'Return value of Post\Entity\Post::getUser() must be an instance of User\Entity\User, null returned' in /var/www/html/crud/module/Post/src/Entity/Post.php:122

/var/www/html/crud/vendor/zendframework/zend-test/src/PHPUnit/Controller/AbstractControllerTestCase.php:451
/var/www/html/crud/module/Post/test/Controller/PostControllerTest.php:95

PostController showAction ()

public function showAction()
{
$postId = $this->params()->fromRoute('postId');
$post = $this->postService->getPost($postId);

return new ViewModel([
'post' => $post
]);
}

Почтовый сервис getPost ()

public function getPost($postId = null)
{
$post = $this->entityManager->getRepository(Post::class)->find($postId);

return $post;
}

PostControllerTest testIfPostDetailsShownSuccessfully ()

public function testIfPostDetailsShownSuccessfully()
{

$mockedEm = $this->createMock(EntityManager::class);

$postRepositoryMock = $this->createMock(PostRepository::class);
$postRepositoryMock->expects($this->any())
->method('find')
->willReturn($this->getPostMock());

$postRepositoryMock->expects($this->any())
->method('findOneBy')
->willReturn($this->getPostMock());

$userRepositoryMock = $this->createMock(UserRepository::class);
$userRepositoryMock->expects($this->any())
->method('find')
->willReturn(new User());

$userRepositoryMock->expects($this->any())
->method('findOneBy')
->willReturn(new User());

$userEntityMock = $this->createMock(UserRepository::class);
$userEntityMock->expects($this->any())
->method('find')
->willReturn(new User());

$this->dispatch('/post/1');
$this->assertResponseStatusCode(200);
}

/**
* @return MockObject
*/
public function getPostMock()
{
$user = new User();
$user->setEmail('[email protected]');

$postMock = $this->createMock(Post::class);
$postMock->expects($this->any())
->method('getUser')
->willReturn($user);

return $postMock;
}

Сообщение всегда имеет одного пользователя, у меня есть метод getUser () в сущности Post, который возвращает объект сущности User. Но я не могу смоделировать объект post, и он всегда получает getUser как ноль.

Буду признателен за любую оказанную помощь.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]