RavenDB:在内存中获取异常Document Store" Voron在32位模式下容易出现故障。"

时间:2015-05-28 21:42:07

标签: unit-testing ravendb

遵循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

谢谢!

2 个答案:

答案 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 
{
    ...
}