не может издеваться над объектом с помощью phpunit - PullRequest
2 голосов
/ 20 марта 2019

Я хочу проверить соединение с базой данных, и у меня есть тест:

$author=['db_host'=>'a','db_name'=>DB_NAME,'db_user'=>DB_USER,'db_pass'=>DB_PASS,'db_timeout'=>DB_TIMEOUT];    

$mock_db=\Mockery::mock('DB')->makePartial();
$mock_db->shouldReceive('getAuthorDb')->andReturn($author);
$mock_ctrl= new DB;
$mock_ctrl->getAuthorDb=$mock_db;
$result=$mock_ctrl->getConnect();
$this->assertNotNull($result);

и это класс БД:

class DB
{
    public $obj = null;
    public $table = 'contacts';
    public function __construct(){
        $this->getConnect();        
    }
    public function getAuthorDb(){
        return ['db_host'=>HOST,'db_name'=>DB_NAME,'db_user'=>DB_USER,'db_pass'=>DB_PASS,'db_timeout'=>DB_TIMEOUT];
    }
    public function getConnect(){
        try{
            $author=$this->getAuthorDb();
            $dsn="mysql:host=".$author['db_host']."; dbname=".$author['db_name'];
            $this->obj = new \PDO($dsn, $author['db_user'], $author['db_pass'],$author['db_timeout']);
            $this->obj->query("set names 'utf8' ");
        }
        catch(\Exception $e)
        {
            echo $e->getMessage();  exit;
        }
    }
}

но, очевидно, метод getAuthorDb не является ложным. это получить данные. Почему?!

Пожалуйста, помогите

1 Ответ

0 голосов
/ 28 марта 2019

Когда вы звоните new DB, вы создаете реальный класс, а не поддельный. Вы должны будете передать ваш макетированный экземпляр БД любому классу или функции, который его использует.
Важно помнить, что фиктивные классы по-прежнему являются классами, вы не заменяете имя DB глобально или что-то еще. Вы должны использовать где-нибудь высмеянный класс, иначе он просто сидит там.

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