Модульное тестирование приложений Dababase - PullRequest
6 голосов
/ 25 мая 2011

Я пытаюсь войти в царство TDD, и у меня трудное время, когда я тестирую несколько своих пользовательских моделей. Я пытаюсь проверить правильность моих моделей, и бизнес-требования следующие:

  1. > = требуется 6-символьное имя пользователя
  2. > = пароль из 5 символов, по крайней мере с 1 буквой и цифрой
  3. требуется действительный формат электронной почты
  4. ... бла-бла-бла
  5. имя пользователя и адрес электронной почты уже не могут существовать в БД

Все требования легко проверяются, кроме 5, для которого требуется, чтобы база данных находилась в известном состоянии. Я знаю, что с помощью PHPUnit я могу установить свою базу данных в известное состояние, используя файлы XML, но есть ли лучший способ?

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

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

Может кто-нибудь объяснить мне различные варианты, которые у меня есть, и какие маршруты лучше?

Спасибо

Edit:

Я думаю, что я собираюсь использовать подход Ruby on Rails и просто настроить 3 отдельные базы данных, производство, разработку и тестирование. Если у кого-то нет сильных возражений.

1 Ответ

3 голосов
/ 25 мая 2011

Некоторые люди говорят, что не тестируют базу данных, другие, как я, говорят, что это единственный способ узнать, хорош ли ваш код DAO.

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

Для теста, который вы упомянули (имя пользователя и адрес электронной почты еще не могут существовать в БД), выполните что-то вроде этого (psuedocode).

Create user with username that you know doesn't exist (say username-largerandomuuid)
Insert user.
Assert user was created

Insert same user(name)
Assert error is thrown.
...