一些背景知识:
我有一个Web应用程序,它从存储在RavenDB中的非规范化文档集中读取。这些文档由事件处理程序创建和修改。在生产中,应用程序使用标准文档存储,通过c#API连接到远程数据库。
当我对应用程序进行单元测试时,我将处理程序配置为使用内存嵌入式数据库,创建一些事件,并查询预期的文档。这绝对没问题。
编写UI测试:
我想让我们的测试人员使用SpecFlow和Selenium编写自动UI测试。当为其他应用程序(使用SQL)实现此功能时,功能文件的执行将通过以下方式准备测试环境:
现在我想使用Raven采用相同的方法,并考虑两种方法。
首先是遵循与上述完全相同的模型。我在这里遇到的问题是如何/在何处存储数据库,以及如何在之后整理它们。可以在设置和拆卸期间以编程方式启动和停止服务器可执行文件,然后可以通过删除文件来删除数据库。我没试过这个,但理论上它应该有用。
第二种方法是遵循类似的方法,但用标准文档存储替换嵌入式存储(不在内存中运行)。为此,我需要修改Web应用程序的IoC(如果在xml中使用config),以将IDocumentStore解析为EmbeddedDocumentStore。然后我像以前一样使用处理程序构建状态,然后在启动IIS之前处理处理程序的文档存储(除非我缺少,否则似乎无法在使用相同嵌入式数据库的同时运行两个应用程序东西)。
第二种方法最初似乎是更好的选择,但我遇到了一些奇怪的行为,即处理程序创建的文档与Web应用程序查询时返回的结果不一致。具体来说,一些子集合由处理程序填充,但是当从Web应用程序执行的查询返回时是空的。说实话,我并不感到惊讶,因为我怀疑这是打算使用嵌入式数据库的情况。此外,当我从一个应用程序跳转到另一个应用程序时,通过管理工作室查看嵌入式数据库非常困难。
所以无论如何,在那个漫长的描述之后,我很好奇其他人对这些方法的看法,如果有更好的选择,我会失踪。另外我确信有很多我不知道的隐藏的RavenDB宝石,所以在这方面的任何指针也会有所帮助。
答案 0 :(得分:2)
佰,
以编程方式启动/停止raven.server
。但是传递/ram
标志,这将让你在内存中运行整个事情,并可以处理所有的清理工作