Заполнение базы данных MySQL значениями - PullRequest
5 голосов
/ 18 декабря 2010

У меня есть локально установленный сервер MySQL на моем ноутбуке, и я хочу использовать информацию, содержащуюся в нем, для модульного теста, поэтому я хочу создать скрипт для автоматической генерации всех данных.Я использую MySQL Workbench, который уже генерирует таблицы (из модели).Можно ли использовать его или другой инструмент для создания автоматического сценария для заполнения его данными?

РЕДАКТИРОВАТЬ: Теперь я вижу, что мне неясно.У меня есть значимые данные для модульного теста.Когда я сказал «генерировать все данные автоматически», я имел в виду, что инструмент должен взять значимые данные, которые у меня есть в моей локальной БД сегодня, и создать скрипт для генерации тех же данных в БД других разработчиков.

Ответы [ 2 ]

1 голос
/ 18 декабря 2010

Наиболее полезными юнит-тестами являются те, которые отражают данные, которые вы ожидаете или видели на практике.Накачка вашей схемы полными случайных битов не заменяет тщательно обработанные тестовые данные.Как предложил @McWafflestix, mysqldump является полезным инструментом, но если вы хотите что-то более простое, рассмотрите возможность использования LOAD DATA with INFILE , которая заполняет таблицу из CSV.

Некоторые другие вещи, о которых стоит подумать:

  1. Тест с базой данных в известном состоянии.Оберните все свои модульные тесты взаимодействия с базой данных в транзакции, которые всегда откатываются.
  2. Используйте dbunit для достижения того же конца.

Обновление

Если вы находитесь в среде JavaХорошим решением является dbUnit:

  1. Вы можете импортировать и экспортировать данные в формате XML через его API-интерфейсы, что решит проблему перехода с вашего компьютера к другим членам вашей команды.
  2. Предназначен для восстановления состояния базы данных.Таким образом, снимки базы данных перед выполнением тестов, а затем восстановление в конце.Таким образом, тесты не имеют побочных эффектов (т.е. они не изменяют данные постоянно).
0 голосов
/ 18 декабря 2010

Вы можете заполнить значениями по умолчанию (если определены)

CREATE TABLE #t(c1 int DEFAULT 0,c2 varchar(10) DEFAULT '-')
GO
--This insert 50 rows in table
INSERT INTO #t( c1, c2 )
DEFAULT VALUES
GO 50

SELECT * FROM #t
DROP TABLE #t
...