Тестирование репозиториев PhpUnit Symfony findOneBy - PullRequest
0 голосов
/ 16 декабря 2018

Я подключен к phpunit в Symfony 3, и мне интересно, что именно я должен соблюдать при тестировании репозитория.Например, у меня есть следующая функция репо:

/**
 * {@inheritdoc}
 */
public function findAdminRole()
{
    $role = $this->repository->findOneBy(['name' => Role::ADMIN]);

    if (null === $role) {
        throw new NotFoundException();
    }

    return $role;
}

Как будет выглядеть тест для этого?Должен ли я проверить, что функции findOneBy и NotFoundException вызваны или чтобы получить реальные значения данных?Я как бы застрял здесь.

Спасибо.

1 Ответ

0 голосов
/ 17 декабря 2018

хорошо, так что findOneBY возвращает либо Null, либо Object, вы можете настроить примеры данных, которые будут возвращать либо Null, либо сказать объект роли, и проверить это, на мой взгляд, кое-что, чтобы помочь вам начать.Итак, в настройках я бы смоделировал репозиторий:

   $this->mockRepository = $this
            ->getMockBuilder('path to the respository')
            ->disableOriginalConstructor()
            ->setMethods(array('if you want to stub any'))
            ->getMock();
$this->object = new class( //this is the class under test
// all your other mocked services, ex : logger or anything else
)

Теперь у нас есть макет репо, давайте посмотрим, как будут выглядеть примеры тестов

1-й тест

   public function findAdminRoleTestReturnsException(){
    $name = ['name' => Role::ABC]; // consider this will return Null result from DB due to whatever reason
    $exception = new NotFoundException();
    // do whatever other assertions you need here
      $this->mockRepository->expects($this->any())
                ->method('findOneBY')
                ->with($name)
                ->will($this->returnValue(null));
    // Now call the function
    $role = $this->object->findAdminRole();
$this->assertEquals($exception, $role);
    }

таким же образом, как описано выше, вы можете написать еще один тест, например: 2-й тест

public function findAdminRoleTestReturnsNewRole(){
$name = ['name' => Role::ADMIN] // this will find the entry in theDB
$ testRoleObject = new Role();
$this->mockRepository->expects($this->any())
                    ->method('findOneBY')
                    ->with($name)
                    ->will($this->returnValue($testRoleObject));
        // Now call the function
        $role = $this->object->findAdminRole();
    $this->assertEquals($testRoleObject, $role);
}

надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...