Модульное тестирование RavenDB

В своих модульных тестах я настраиваю каждый тест на полностью пустой IDocumentSession. Я делаю это так:

[SetUp]
public void SetUp()
{
  _store = new EmbeddableDocumentStore
  {
     RunInMemory = true
  };

  _store.Initialize();

  Session = _store.OpenSession();
}

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

Я хочу знать: смогу ли я это сделать и улучшит ли это производительность.


person nick    schedule 23.09.2011    source источник


Ответы (4)


Это рекомендуемый подход для модульного тестирования с помощью ravendb. Не рекомендуется для производства, в основном работает в режиме в памяти. Если вы обнаружите, что это медленно, попробуйте профилировать и выяснить, что именно замедляет работу.

person Ayende Rahien    schedule 24.09.2011
comment
Спасибо. Если это путь, то я доволен этим - person nick; 24.09.2011

Попробуйте использовать RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true.

        var _store = new EmbeddableDocumentStore()
        {
            Configuration =
                {
                    RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true,
                    RunInMemory = true,
                }
        };
person Daniel Lang    schedule 23.09.2011
comment
Я сначала подумал, что ты шутишь. Впрочем, это не слишком сильно влияет, хотя, может быть, немного - person nick; 23.09.2011
comment
Да, я тоже был ошеломлен, когда впервые увидел длину этой собственности. Однако, если вы посмотрите на собственный исходный код RavenDB, вы обнаружите, что все их модульные тесты создают новое хранилище, как показано выше. Он считает, что это, безусловно, самый безопасный и безотказный способ создать новый вместо удаления всего содержимого. Я действительно не рекомендовал бы это. - person Daniel Lang; 23.09.2011

Дорогостоящим вызовом является _store.Initialize() -- вы заставляете RavenDb создавать новую базу данных при каждом тесте. В большинстве случаев будет работать одна база данных для каждого запуска набора тестов.

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

person Wyatt Barnett    schedule 23.09.2011
comment
Что касается вашего первого комментария, я примерно так и думал. С точки зрения вашей рекомендации, кажется, много работы для того, что мне нужно, но я посмотрю. Спасибо, Вятт. - person nick; 23.09.2011

Я знаю, что это старый вопрос, но начиная с RavenDB 2.0 (еще не стабильной) есть Raven Test Helper, доступный в виде пакета Nuget, который действительно полезен, когда дело доходит до модульного тестирования RavenDB.

http://ravendb.net/docs/samples/raven-tests/createraventests?version=2.0

http://nuget.org/packages/RavenDB.Tests.Helpers/2.0.2198-Unstable

person Nordis    schedule 04.01.2013