pdo-> exec не определено при тестировании - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть файл Connection.php, где я создаю соединение PDO в конструкторе.Но когда я хочу использовать это в тестах, это дает сбой и выдает ошибку : вызов неопределенного метода App \ model \ Connection :: exec ()

Connection.php

namespace App\model;

use \PDO;

class Connection
{
    private $pdo;

    public function __construct($dsn, $user = null, $password = null)
    {
        $this->pdo = new \PDO($dsn, $user, $password);
        $this->pdo->setAttribute(
            PDO::ATTR_ERRMODE,
            PDO::ERRMODE_EXCEPTION
        );
    }

    public function getPDO()
    {
        return $this->pdo;
    }
}

PDOMessageModelTest.php

namespace App\Tests\Util;

use App\model\PDOMessageModel; 
use App\model\Connection; 
use PHPUnit\Framework\TestCase; 
use \PDO;

class PDOMessageModelTest extends TestCase {
    public function setUp()
    {
        $this->connection = new Connection('sqlite::memory:');

        $this->connection->getPDO()->exec('CREATE TABLE message (
                        id INT,
                        content VARCHAR(1000),
                        category VARCHAR(100),
                        user_id INT,
                        upvotes INT,
                        downvotes INT,
                        PRIMARY KEY (id)
                   )');

var_dump ($ this-> connection-> getPDO ());die (); дает мне следующий вывод: tests \ PDOMessageModelTest.php: 15: class PDO # 352 (0) {}

1 Ответ

0 голосов
/ 28 сентября 2018

На самом деле, я не понимаю, зачем вам нужно вызывать exec () в вашем тесте.обычно, когда мы выполняем модульные тесты, мы высмеиваем все классы или функции, которые не входят в тестируемый класс.

вы должны сделать что-то подобное, если вам нужно протестировать метод doSomething () в данном классе.

см. Документ здесь

               public function testStub()
                {
                    // Create a stub for the SomeClass class.
                    $stub = $this->createMock(PDO::class);

                    // Configure the stub.
                    $stub->method('exec')
                         ->willReturn('true');

                    // Calling $stub->doSomething() will now return
                    // 'foo'.
                    $this->assertEquals('foo', $stub->doSomething());
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...