Лучший способ сбросить базу данных в известное состояние между тестами интеграции FlexUnit4?

StackOverflow https://stackoverflow.com/questions/4009099

Вопрос

Задний план:

У меня есть веб-приложение Flex, которое связывается с Java Back-End через Blazeds. Клиент Flex состоит из модуля Flex-Client, который содержит модели представлений и презентаций, а также отдельный модуль Flex-Service, который содержит модели (объекты value) и объекты обслуживания.

Я нахожусь в процессе написания асинхронных интеграционных испытаний для удаленного модуля Flex-Service, используя Flexunit4. В некоторых тестах я изменяю тестовые данные и запрашивайте его обратно, чтобы посмотреть, все работает (с указанной здесь техникой: http://saturnboy.com/2010/02/async-testing-with-flexunit4.)

Вопрос:

Как я могу перезагрузить базу данных в известное состояние перед каждым методом теста FlexUnit4 (или цепь метода теста)? В моих тестах интеграции Java Server я сделал это через комбинацию транзакций DBUNIT и Spring Test - каким откатом после каждого метода теста. Но эти интеграции FlexUnit пролируются несколько запросов и, следовательно, несколько транзакций.

Короткое применение API службы тестирования интеграции на бэкэнде, как это может быть достигнуто. Конечно, другие тоже вступили в это? Подобные вопросы были заданы раньше ( Откатная база данных после интеграции (селена) тесты ), но без удовлетворительных ответов.

Это было полезно?

Решение

Есть несколько вариантов:

  1. Если вы используете последовательности для первичных клавиш: после того, как база данных была загружена тестовыми данными, удалите генератор последовательности и замените его одним, который начинается с -1 и рассчитывает вниз. После теста вы можете удалить объекты с первичной клавишей <0. Breaks для тестов, которые изменяют существующие данные.

    Аналогичный подход - создать специальный пользователь или, если у вас есть created Столбцы Timestamp, затем начальные данные должны быть до некоторой даты в прошлом. Это нуждается в дополнительных индексах, хотя.

  2. Используйте базу данных на сервере, которую можно быстро вытереть (H2., Например). Добавьте API Service, которую вы можете позвонить от клиента для сброса БД.

  3. Добавьте отменить в ваше веб-приложение. Это довольно усилие, но очень крутая особенность.

  4. Используйте базу данных, которая позволяет перейти назад во времени с одной командой, например, Notus Notes.

  5. Не используйте базу данных вообще. Вместо этого напишите прокси-сервер, который ответит на правильный вход с правильным выходом. Добавьте некоторый код на свой реальный сервер, чтобы написать данные, обмениваемые в файл и создайте тесты из этого.

    Или запись тестов, которые проходят на реальном сервере и которые создают эти файлы. Это позволит вам отслеживать, какие файлы меняются при изменении кода на сервере или клиенте.

    На сервере написать тесты, которые убедитесь, что это сделает правильные модификации БД.

  6. Похоже на «без базы данных», скрыть весь код, который обращается к БД в слое БД и использует интерфейсы для доступа к нему. Это позволяет вам написать макетный слой, который ведет себя как реальная база данных, но которая сохраняет данные в памяти. Звучит просто, но обычно это много работы.

Другие советы

В зависимости от размера вашей тестовой базы данных, вы можете автоматизировать чистые резервные копии / восстанавливаемые, которые дают вам точную среду, которую вы имели на каждом тестовом запуске.

У меня этот подход в моих нынешних проектах (другая платформа), и мы также проверяем сценарии схемы схемы данных с тем же подходом.

Я обезвожен (мое любимое оправдание для коротких комитров). Извините, если этот ответ слишком близок к «API службы тестирования интеграции на ответной ответственности», который вы не хотели.

Команда, которая настроила Flexunit 'Age назад «сделала выбор и созданные решения, основанные на нашей архитектуре, некоторые из которых будут применяться только к нашей инфраструктуре. Вещи, которые следует учитывать: 1) Все наши методы бэкэнда возвращают один и тот же отдаленно-сопоставленный класс. 2) Наиболее все наши методы имеют абстрактный метод, который рассказывает метод (или нет) запустить «начать транзакцию» в начале метода и «транзакцию Commit» в конце (не уверен в вашем кусочке DB) Отказ

Последнее, вероятно, является самым ориентированным на объективное решение, но вот какой вызов асинхронного монтажа делает: каждый тест на единицу вызовов вызывает тот же метод-обертки, и мы проходим - в Name / Package-locale, плюс [ ...] args. Бегинтранство сделано. Способ называется ложным способом для тестов устройства Fe (чтобы игнорировать линии бегинтрации и сериала), все запущено, и главный класс «ответа» генерируется и возвращается в метод теста устройства. Запускается DB-Rollback, и ответ возвращается в тест устройства.

Все наши модульные тесты основаны на откатных транзакциях. Я не мог рассказать вам о проблемах, которые они имели при наступлении того, что джив, но это мое общее понимание того, как работает Штуфф.

Надеюсь, это поможет. Понятно, если это не так. Удачи, --держатель

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top