хорошо, так что 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);
}
надеюсь, что это поможет