遵循RavenDB的文档
http://ravendb.net/docs/article-page/2.5/csharp/samples/raven-tests/createraventests
我无法成功通过创建内存文档存储来运行单元测试。我使用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()...后,我收到以下异常:
&#34;用户代码未对异常进行处理 Voron在32位模式下容易出现故障。使用Raven / Voron / AllowOn32Bits在32位进程中强制使用voron。&#34;
我正在使用Visual Studio 2013(Update 4)和RavenDB 3.0
谢谢!
答案 0 :(得分:12)
在NewDocumentStore的构造函数中传入 configureStore 参数。这是一个以EmbeddableDocumentStore为参数的Action。在该操作中,您可以设置配置的不同部分,包括 AllowOn32Bits 属性。
public void ConfigureTestStore(EmbeddableDocumentStore documentStore)
{
documentStore.Configuration.Storage.Voron.AllowOn32Bits = true;
}
然后将其作为构造函数中的configureStore参数传递。
using (var store = NewDocumentStore(configureStore:ConfigureTestStore))
答案 1 :(得分:3)
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
{
...
}