Что такое стандартная / лучшая практика для создания модульных тестов для функциональности с использованием баз данных?

Я получаю идею модульного тестирования, но стараюсь думать о чистом простом способе, когда это требует функциональности базы данных. Например, у меня есть функция, которая возвращает результат, основанный на запросе выбора базы данных. Будет ли база данных всегда оставаться для меня одинаковой, чтобы правильно видеть, что возвращаются только правильные результаты. Каков наилучший способ выполнения модульного тестирования (в PHP), когда он требует бездействия базы данных (будь то чтение, запись, обновление или удаление)?

В руководстве PHPUnit есть целая глава:

Это похоже на все остальное, когда Unit-Testing. Создайте известное состояние и протестируйте свой код против него, чтобы увидеть, возвращает ли он ожидаемые результаты.

Это не единичный тест, если ему нужна база данных.

Лично я создаю базу данных фиктивных тестов и заполняю ее известным набором данных для каждого setUp прогона (я делаю это прямо в функциях setUp ). Затем тесты выполняются против этого набора данных, а затем удаляются на tearDown

Теперь это скорее тест интеграции, чем тест Unit (и лично я отношусь к нему иначе, чем к единичному тесту, работаю по своему расписанию вместе с другими интеграционными тестами), но он по-прежнему весьма полезен.