Макет MySQL DB для PHPUnit - PullRequest
       5

Макет MySQL DB для PHPUnit

8 голосов
/ 10 августа 2011

Я пытаюсь создать модульные тесты для моего проекта Yii.

Проблема: база данных MySQL.Я не хочу запускать базу данных MySQL каждый раз, когда я запускаю тесты, потому что она медленная, ненадежная, возможно, некоторые члены команды не настроили ее и т. Д.способ создать базу данных SQLite в памяти и использовать ее, но SQL, созданный Yii, похоже, не работает на SQLite так же, как на MySQL.Я получаю множество ошибок.

Короче говоря: я хочу смоделировать базу данных MySQL в памяти.

Как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Инкапсулируйте ваши операции MySQL в объект доступа к данным . Вы не только скрываете SQL от своей бизнес-логики, которая имеет другие преимущества, вы также можете использовать mock DAO при тестировании остальной части приложения. При проверке не требуется база данных, и вы можете проверить, что бизнес-логика правильно обращается к уровню данных.

Это похоже на ответ Мчла, но перемещает насмешку на один слой вверх. Я считаю, что гораздо проще высмеивать findUserByEmail(), чем различные mysqli методы. Вы можете оставить проверку SQL для тестов DAO и запустить ее для базы данных в своих интеграционных тестах.

1 голос
/ 10 августа 2011

Один из способов - это смоделировать объект подключения и проверить, вызывается ли его метод query() с ожидаемым SQL.Вам нужен еще один способ проверить правильность ожидаемого SQL.Это можно сделать как отдельную группу тестов (или даже переместить за пределы вашего набора тестов), чтобы он не запускался со всеми другими тестами.

...