RavenDB: получение исключения в памяти Хранилище документов "Ворон склонен к отказу в 32-битном режиме".
После выполнения документации RavenDB
http://ravendb.net/docs/article-page/2.5/csharp/samples/raven-tests/createraventests
Я не могу успешно получить unit test для запуска после создания хранилища документов в памяти. Я скопировал и вставил тестовый образец, найденный в документации выше, используя RavenDB RavenTestBase.
[TestClass]
public class IndexTest : RavenTestBase
{
[TestMethod]
public void CanIndexAndQuery()
{
using (var store = NewDocumentStore())
{
new SampleData_Index().Execute(store);
using (var session = store.OpenSession())
{
session.Store(new SampleData
{
Name = "RavenDB"
});
session.SaveChanges();
}
using (var session = store.OpenSession())
{
var result = session.Query<SampleData, SampleData_Index>()
.Customize(customization => customization.WaitForNonStaleResultsAsOfNow())
.FirstOrDefault();
Assert.Equals(result.Name, "RavenDB");
}
}
}
}
public class SampleData
{
public string Name { get; set; }
}
public class SampleData_Index : AbstractIndexCreationTask<SampleData>
{
public SampleData_Index()
{
Map = docs => from doc in docs
select new
{
doc.Name
};
}
}
При достижении NewDocumentStore()... Я получаю следующее исключение:
"Исключение было не обработано кодом пользователя
Ворон склонен к отказу в 32-битном режиме. Используйте Raven/Voron/AllowOn32Bits, чтобы заставить voron в 32-битном процессе.
Я использую Visual Studio 2013 (обновление 4) и RavenDB 3.0
Спасибо!
Ответы
Ответ 1
В конструкторе для передачи NewDocumentStore параметр configureStore. Это действие, которое в качестве параметра принимает значение EmbeddableDocumentStore. В рамках этого действия вы можете установить различные части конфигурации, включая свойство AllowOn32Bits.
public void ConfigureTestStore(EmbeddableDocumentStore documentStore)
{
documentStore.Configuration.Storage.Voron.AllowOn32Bits = true;
}
Затем передайте это как аргумент configureStore в конструкторе.
using (var store = NewDocumentStore(configureStore:ConfigureTestStore))
Ответ 2
RavenTestBase
предоставляет ряд виртуальных членов, которые вы можете переопределить для выполнения общей конфигурации для таких вещей.
Я создаю промежуточный тип, который наследует от RavenTestBase
, который выполняет мою общую конфигурацию, а затем использует этот промежуточный тип как родительский тип для моих тестов...
public abstract class IntermediateRavenTestBase : RavenTestBase
{
protected override void ModifyConfiguration(InMemoryRavenConfiguration configuration)
{
base.ModifyConfiguration(configuration);
// add any plugins you might use...
configuration.Catalog.Catalogs.Add(new AssemblyCatalog(typeof(NodaTimeCompilationExtension).Assembly));
}
protected override void ModifyStore(EmbeddableDocumentStore documentStore)
{
base.ModifyStore(documentStore);
// any common document store config changes...
// including the Voron setting
documentStore.Configuration.Storage.Voron.AllowOn32Bits = true;
documentStore.ConfigureForNodaTime();
documentStore.Conventions.DefaultQueryingConsistency = ConsistencyOptions.AlwaysWaitForNonStaleResultsAsOfLastWrite;
documentStore.Conventions.JsonContractResolver = new CustomContractResolver();
}
}
[TestClass]
public class IndexTest : IntermediateRavenTestBase
{
...
}