Я пытаюсь проверить свою бизнес-логику, которая взаимодействует с RedBeanPHP ORM, я не хочу тестировать сам RedBeanPHP, а поведение моего кода, когда он связан с RedBean.
Я подумал о том, чтобы издеваться над методом, который я хочу протестировать, а затем вернуть нужное мне значение, таким образом я изолирую соединение с базой данных, потому что оно мне не нужно, и я просто проверяю поведение этого метода... Проблема, однако, в том, что все методы RedBean являются общедоступными статическими, и я читал, что не могу издеваться над такими методами.
Примечание: вызов этого метода Facade::count('table_name') должен возвращать количество строк в этой таблице, то есть Int.
Я попробовал этот тест, и он не возвращает Int, как я ожидал:
/**
* @param string $tableName
* @param int $returnValue
*
* @return \PHPUnit_Framework_MockObject_Builder_InvocationMocker
*/
protected function mockCount($tableName, $returnValue)
{
$this->beanCount = $this->getMockBuilder(Facade::class)->setMethods(['count'])->getMock();
return $this->beanCount
->expects($this->once())
->method('count')
->with($this->equalTo($tableName))
->willReturn($returnValue);
}
public function testCountSuccess()
{
$tableCount = $this->mockCount('questions', 7);
$this->assertInternalType('int', $tableCount);
}
Есть ли способ издеваться над статическими методами RedBean? и если есть другой способ или метод, который может работать в этом случае? пожалуйста, порекомендуйте .
Спасибо.