总结:我想使用EmbeddableDocumentStore(我相信the recommended approach)对使用IDocumentSession的测试类进行单元化。与使用“真实”,本地托管的DocumentStore创建的会话相比,使用静态索引的简单测试慢慢地运行非常。运行了一些基本的分析 - 约 7x慢 (见下文)。我无法使用RavenTestBase,因为我想使用this approach to test using SpecsFor。
我期待使用内存存储的测试速度非常快 - 我是否在解释这种性能时做错了什么?
编辑:Having read this我禁用了我的防病毒软件,这没有任何区别。
两种方法之间的区别:
我通过以下方式创建 EmbeddableDocumentStore
private static IDocumentStore CreateInMemoryEmbdeddableDocumentStore()
{
var embeddedStore = new EmbeddableDocumentStore();
embeddedStore.Configuration.RunInMemory = true;
embeddedStore.Configuration.RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true;
embeddedStore.RegisterListener(new NoStaleQueriesAllowedListener());
return embeddedStore.Initialize();
}
和“真正的” DocumentStore by:
public IDocumentStore CreateLocalDocumentStore()
{
var store = new DocumentStore { Url = "http://localhost:8080", DefaultDatabase = "ColourTest" };
store.RegisterListener(new NoStaleQueriesAllowedListener());
return store.Initialize();
}
在这两种情况下我使用它来确保在获取查询结果之前已经进行了索引:
public class NoStaleQueriesAllowedListener : IDocumentQueryListener
{
public void BeforeQueryExecuted(IDocumentQueryCustomization queryCustomization)
{
queryCustomization.WaitForNonStaleResults();
}
}
然后我通过以下方式开会:
private static IDocumentSession ConfigureIndexesAndCreateSession(IDocumentStore store)
{
IndexCreation.CreateIndexes(typeof(Colours_ColourCountByMood).Assembly, store);
return store.OpenSession();
}
使用此会话,我设置测试数据(使用真实存储,我也首先删除现有数据)。像往常一样,我然后运行method being tested - 使用static index - 然后执行断言。
将效果与性能分析进行比较:
我还添加了logging calls through the code (see complete code here)来比较两种情况下的时间安排。测试运行的示例结果:
TestUsingInMemoryEmbeddable()
191 ms : Start create EmbeddableDocumentStore
1819 ms : Finish create EmbeddableDocumentStore
1819 ms : Start embeddedStore.Initialize()
3411 ms : Finish embeddedStore.Initialize()
3411 ms : Start CreateIndexes
5322 ms : Finish CreateIndexes
5322 ms : Start OpenSession
5330 ms : Finish OpenSession
5331 ms : Start test data storing
5852 ms : Finish test data storing
5853 ms : Start test Act
6985 ms : Finish test Act
6985 ms : Start test Assert
6998 ms : Finish test Assert
TestUsingLocallyHosted()
1 ms : Start create DocumentStore
1 ms : Finish create DocumentStore
2 ms : Start documentStore.Initialize()
608 ms : Finish documentStore.Initialize()
608 ms : Start CreateIndexes
717 ms : Finish CreateIndexes
717 ms : Start OpenSession
717 ms : Finish OpenSession
718 ms : Start DeleteTestData
730 ms : Finish DeleteTestData
730 ms : Start test data storing
823 ms : Finish test data storing
823 ms : Start test Act
957 ms : Finish test Act
957 ms : Start test Assert
957 ms : Finish test Assert
运行这些数字后,上述数字具有代表性:在运行嵌入式设备时,相对较慢的速度在整个测试代码中是显而易见的。
答案 0 :(得分:0)
您需要直接在EmbeddableDocumentStore上使用RunInMemory属性。
此外,您可能希望多次运行,以查看时间。我们正在做很多前期工作以降低总体成本。