Похоже, ваш вопрос на самом деле два вопроса. Если вы используете исключить базу данных из вашего тестирования? Когда у вас есть база данных, то как вы должны генерировать данные в базе данных?
По возможности я предпочитаю использовать реальную базу данных. Часто запросы (написанные на SQL, HQL и т. Д.) В классах CRUD могут возвращать удивительные результаты, когда сталкиваются с реальной базой данных. Лучше избавиться от этих проблем на ранней стадии. Часто разработчики пишут очень тонкие модульные тесты для CRUD; тестирование только самых доброкачественных случаев. Использование реальной базы данных для тестирования может проверить все возможные случаи, о которых вы, возможно, даже не подозревали.
При этом могут быть и другие проблемы. После каждого теста вы хотите вернуть свою базу данных в известное состояние. В моей нынешней работе мы уничтожили базу данных, выполнив все операторы DROP, а затем полностью воссоздав все таблицы с нуля. Это очень медленно в Oracle, но может быть очень быстро, если вы используете базу данных в памяти, такую как HSQLDB. Когда нам нужно устранить специфичные для Oracle проблемы, мы просто изменяем URL-адрес базы данных и свойства драйвера, а затем работаем с Oracle. Если у вас нет такой переносимости базы данных, то Oracle также имеет некоторую функцию снимка базы данных, которую можно использовать специально для этой цели; откат всей базы данных до какого-то предыдущего состояния. Я уверен, что есть другие базы данных.
В зависимости от того, какие данные будут в вашей базе данных, API или подход к загрузке могут работать лучше или хуже. Если у вас высокоструктурированные данные с множеством связей, API-интерфейсы сделают вашу жизнь проще, сделав отношения между вашими данными явными. Вам будет сложнее ошибиться при создании набора тестовых данных. Как уже упоминалось другими авторами, инструменты рефакторинга могут позаботиться о некоторых изменениях в структуре ваших данных автоматически. Часто я нахожу полезным думать о тестовых данных, сгенерированных API, как о создании сценария; когда пользователь / система выполнили шаги X, Y Z, а затем начнутся тесты. Эти состояния могут быть достигнуты, потому что вы можете написать программу, которая вызывает тот же API, который будет использовать ваш пользователь.
Загрузка данных становится гораздо важнее, когда вам нужны большие объемы данных, у вас мало связей между данными или есть согласованность в данных, которые невозможно выразить с помощью API или стандартных реляционных механизмов. На одной работе, которая работала в моей команде, писал приложение для отчетности для большой системы проверки сетевых пакетов. Объем данных был довольно большим для того времени. Чтобы вызвать полезное подмножество тестовых случаев, нам действительно нужны тестовые данные, генерируемые анализаторами. Таким образом, корреляции между информацией об одном протоколе будут коррелировать с информацией о другом протоколе. Было трудно уловить это в API.
Большинство баз данных имеют инструменты для импорта и экспорта текстовых файлов с разделителями таблиц. Но часто вам нужны только их подмножества; сделать использование дампов данных более сложным. На моей нынешней работе нам нужно взять несколько дампов реальных данных, которые генерируются программами Matlab и хранятся в базе данных. У нас есть инструмент, который может вывести подмножество данных базы данных, а затем сравнить их с «основополагающей правдой» для тестирования. Кажется, наши инструменты для извлечения постоянно модифицируются.