Как правильно удалить sqlite DB на tearDown () в PHPUnit? - PullRequest
0 голосов
/ 20 января 2019

Вот упрощенный тест с методами setUp и tearDown:

class FooTest extends TestCase
{
    private $dbFile;

    public function setUp()
    {
        $this->dbFile = 'test.db';

        if (!file_exists($this->dbFile)) {

            $pdo = new \PDO('sqlite:'.$this->dbFile);
            $pdo->query('
                CREATE TABLE `Users` (
                `id` INTEGER PRIMARY KEY AUTOINCREMENT,
                `foo` TEXT
            )');
        }
    }

    public function tearDown()
    {
        if (file_exists($this->dbFile))
            unlink($this->dbFile);
    }

    public function testFoo()
    {
        // ...
    }
}

Теоретически это выглядит хорошо, но я получаю ошибку unlink(test.db): Text file busy.

Любые идеио том, как правильно удалить sqlite DB для tearDown() метода в PHPUnit?

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Для тех, кого это волнует, я нашел ответ на свой вопрос:

Просто отмените или обнулите соединение PDO, чтобы «закрыть» его перед удалением БД SQLite.

unset($this->pdo); или$this->pdo = null;

, затем перейдите к unlink();

0 голосов
/ 20 января 2019

Вместо использования базы данных файлов SQLite, вы можете использовать режим в памяти, где «Файл» - это только «: memory:». Таким образом, вам не нужно удалять файл базы данных.

Также см .: https://www.sqlite.org/inmemorydb.html

(но я не знаю интерфейс PHP к SQLite.)

...