Настройка базы данных для тестирования может ускорить работу. Ofc. это зависит от типа db, который вы используете ... По тестированию интеграции db вы можете просто откатить свои транзакции. Другими интеграционными тестами вы можете просто высмеять уровень доступа к данным.
По функциональным тестам у вас нет выбора, но, чтобы проверить вашу систему с реальной базой данных ...
Я в настоящее время экспериментирую с источниками событий, которые могут помочь много, делая светильники. Краткое краткое описание этого метода: вам нужен DDD (и рекомендуется CQRS), сохраняйте события домена в хранилище событий, а затем вы можете создать текущее состояние, получив связанные события из хранилища событий и воспроизведите их в последовательность. Вы можете создать много разных баз данных кэшей поверх этого хранилища событий, которые содержат только текущее состояние компонента вашей службы, не более того ... Процесс синхронизации выполняется классами, называемыми проекциями, и вызывается автоматически синхронизировать или асинхронно путем сохранения события. Поэтому для того, чтобы сделать светильник, вы должны хранить только событие домена ...
Например, вы можете написать что-то вроде этого с помощью очень простого REST API:
изготовления светильника:
event.storage.clear();
every.cache.clear();
var credentials = {
name: "infje",
password: "oéö9péüöáé9oilusw"
};
var resourceId = "swegretz34ze4wed";
var userDataSet = [
{
id: 1,
type: "UserCreate",
resource: resourceId,
identificationFactors: credentials,
nick: "inf3rno",
birthDate: "1333.03.03.",
hobbies: ["wall climbing"]
},
{
id: 2,
type: "UserUpdate",
resource: resourceId,
hobbies: ["base jumping", "knitting"]
}
];
event.storage.persistAll(userDataSet);
auth.cache.sync(event.storage); //a relational database with the user credentials
users.cache.sync(event.storage); //a nosql document database with the user profile
функциональный тест:
var response = http.get("https://my.test.api/users", credentials);
assert(response).toEqual({
size: 1,
items: [
{
id: resourceId,
nick: "inf3rno",
hobbies: ["base jumping", "knitting"],
birthDate: "1333.03.03."
}
]
});
Примечания: Это просто доказательство концепции коды, поэтому деталь, как шифрование паролей, REST гипермедиа ограничение, автоматизац c вызовом проекционных классов и т. д. ... сейчас не актуальны.
Ofc. это медленное событие медленнее, чем ваш первоначальный подход, но вы не можете изменить эту часть, если хотите протестировать настоящую базу данных, и с помощью источника событий легко сделать тестовые приборы, перенести данные, изменить структуру баз данных кэша с помощью новый выпуск и т. д. Так что это определенно стоит попробовать ...
Я уже использую Hudson, Maven, JWebUnit и другие инструменты. Всеобъемлющие тесты запускаются с помощью каждой успешной сборки основного проекта. Но интересный вопрос заключается в том, как настроить и снести мою среду, если она фактически размещена в базе данных, а также кэширована в веб-приложении, когда я запускаю свои тесты в отдельном процессе. –