Модульное тестирование PHP API, подключенного к базе данных MySQL - PullRequest
2 голосов
/ 10 декабря 2011

Эти , похоже, не очень помогли, поэтому я пишу.

У меня есть PHP API, который делает вставки MySQL, обновления, выборки и т. Д. В основном, когда я изменяю свой PHP-код, чтобы проверить его, я должен использовать поддельный набор данных (потому что я не хочу портить свои реальные данные) и вставьте конкретные значения, запустите сценарий, посмотрите, произойдут ли необходимые вставки и выборки, а затем удалите все только что добавленные значения, восстановите базу данных и т. д. и повторите процедуру при отладке. Это выполнимо, но это НАВСЕГДА.

есть идеи для лучшего метода? У меня все уши ...

Ответы [ 5 ]

1 голос
/ 11 октября 2016

Я пытаюсь сделать то же самое, что и вы.

Я нашел лучшее решение для кодов с подключениями PDO, используя PHPUnit и класс PHPUnit_Extensions_Database_TestCase .

Вы должны кодировать два метода: getConnection () и getDataset ().Вы можете установить собственное соединение, и набор данных может быть файлом XML с некоторыми статическими данными (или реальными подзапросами).Эта методология усекает выбранную таблицу, вставляет значения в ваш набор данных, затем вы устанавливаете соединение уровня модели на getConnection () и все операции, с которыми оно будет работать в статической базе данных.Затем вы можете утверждать таблицы, утверждать наборы данных, утверждать количество результатов, все для сравнения успешности ваших операций в базе данных.

В конце PHPUnit восстановит вашу базу данных в исходное состояние.

Здесь есть хорошая и забавная презентация , иллюстрирующая некоторые допустимые методы.

1 голос
/ 10 декабря 2011

Это определенный кандидат для промежуточной / QA среды.Затем вы можете хранить .sql-файл, который предоставляет вам ваш фиктивный набор данных, и может быстро с ним справиться.среда в виртуальной машине.

1 голос
/ 10 декабря 2011

Работа с тремя средами баз данных: Development, Testing/Staging и Production.

Естественно, что производственная схема должна быть такой же, как тестирование / подготовка, а также разработка, минус изменениячто вы на самом деле работаете в dev.

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

С такой настройкой все, что вам действительно нужно сделать, - это просто убедиться, что изменения dev распространяются на промежуточную версию, и у вас есть три файла конфигурации.Желательно также иметь три отдельные папки для вашего кода.Если вы работаете с окнами, то вы можете создать пакетный файл для автоматического создания резервных копий при подготовке перед перезаписью файлов вашими файлами dev (за исключением конфигов; делайте это вручную, если вносите изменения)

Затем, когда вынужно что-то протестировать, эмулируя, какой должна быть производственная среда, вам просто нужно запустить командный файл, а затем получить доступ к промежуточному хосту для тестирования.

1 голос
/ 10 декабря 2011

Используете ли вы одну и ту же базу данных для производства и тестирования?

Если да, переключитесь на отдельную базу данных только для тестовых данных.После запуска набора тестов вы можете просто удалить всю базу данных.Выполните массовое восстановление с использованием чистых тестовых данных, используя инструменты командной строки MySQL.

0 голосов
/ 10 декабря 2011

Мне кажется, я понимаю ваш вопрос относительно изменений в PHP-коде.

Мои вопросы, почему вы даже запускаете модульные тесты для своей базы данных каждый раз, когда происходит изменение в коде PHP?

Разве вы не написали свой код в Layers (многоуровневый)?

Если есть, замените базу данных хранилищем данных в памяти.

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