UI-тесты с RavenDB

Немного предыстории:

У меня есть веб-приложение, которое читает денормализованный набор документов, хранящихся в RavenDB. Эти документы создаются и изменяются обработчиками событий. В рабочей среде приложение использует стандартное хранилище документов, которое подключается к удаленной базе данных через API C#.

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

Написание UI-тестов:

Я хочу, чтобы наши тестировщики могли писать автоматические тесты пользовательского интерфейса с использованием SpecFlow и Selenium. При реализации этого для других приложений (с использованием SQL) выполнение файлов функций подготовит среду тестирования:

  • Создание новой базы данных в локальном экземпляре SQLExpress (по соглашению все имеют одинаковое имя экземпляра на своих машинах)
  • Перенастройте обработчики для использования новой базы данных и вызовите события для создания желаемого состояния.
  • Скопируйте тестируемое веб-приложение в новое временное расположение и перенастройте его для чтения из новой базы данных.
  • Запустите веб-приложение в IIS Express (еще раз все следуют этому соглашению)
  • Запустите функцию (ы), очистив и перестроив состояние между каждым, если это необходимо.
  • Остановите IIS, удалите тестируемое приложение и удалите базу данных.

Теперь я хотел бы следовать тому же подходу, используя Raven, и рассматриваю два подхода.

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

Второй — следовать аналогичному подходу, но заменить стандартное хранилище документов встроенным (не работающим в памяти). Чтобы это работало, мне нужно изменить IoC (возможно, при использовании конфигурации в xml) веб-приложения, чтобы преобразовать IDocumentStore в EmbeddedDocumentStore. Затем я создаю состояние с помощью обработчиков, как и раньше, затем удаляю хранилище документов обработчиков перед запуском IIS (похоже, невозможно одновременно запускать два приложения, которые используют одну и ту же встроенную базу данных, если я не пропускаю что-то).

Второй подход изначально казался лучшим выбором, но я столкнулся с некоторым странным поведением, когда документы, созданные обработчиками, не согласуются с результатами, возвращаемыми, когда веб-приложение запрашивает его. В частности, некоторые дочерние коллекции заполняются обработчиками, но остаются пустыми при возврате из запроса, выполняемого веб-приложением. Честно говоря, я не был слишком удивлен, так как сомневаюсь, что это тот сценарий, в котором предполагалось использовать встроенные базы данных. Кроме того, очень сложно просматривать встроенную базу данных через студию управления, когда я перескакиваю с одного приложения на другое.

Так или иначе, после этого длинного описания мне любопытно, что другие думают об этих подходах, и есть ли лучшая альтернатива, которую я упускаю. Кроме того, я уверен, что есть много скрытых драгоценных камней RavenDB, о которых я не знаю, поэтому любые указатели в этом направлении также будут полезны.


person Nigel    schedule 31.05.2012    source источник


Ответы (1)


Найджел, Запустить/остановить raven.server программно. Но передайте флаг /ram, который позволит вам запустить все это в памяти и позаботится обо всей работе по очистке.

person Ayende Rahien    schedule 31.05.2012
comment
Потрясающие вещи. Это не могло быть легко сделать! - person Nigel; 08.06.2012