原来我正在正确存储文档所以这个问题的开头部分不正确,可能是由于我对RavenDB缺乏经验。但是我仍然有一个问题,就是在单元测试中使用EmbeddableDocumentStore时能够打开RavenDB Management Studio。
在使用NUnit进行单元测试期间,我似乎遇到了在EmbeddableDocumentStore中存储文档的问题。为了查看我是否实际存储文档,我正在尝试连接到嵌入式数据库。
当试图打开网址 http:// computername:8080 / (由于某种原因,raven db总是在我的电脑上使用计算机名称)浏览器加载栏只是旋转,如果我停止单元测试并再次尝试网址Chrome只是给我一个无法连接的消息。这是上下文的一些代码。
[TestFixture]
public class Test2 : IDisposable
{
private EmbeddableDocumentStore _documentStore;
[SetUp]
public void SetUp()
{
if (_documentStore != null) return;
_documentStore = new EmbeddableDocumentStore
{
DataDirectory = "Data",
RunInMemory = true,
UseEmbeddedHttpServer = true
};
_documentStore.Configuration.AnonymousUserAccessMode = AnonymousUserAccessMode.All;
_documentStore.Initialize();
}
[Test]
public void Test()
{
var document = StaticData.getdocument();
using (var session = _documentStore.OpenSession())
{
session.Store(document);
session.SaveChanges();
}
using (var session = _documentStore.OpenSession())
{
var test = session.Load<ObjectType>().Length;
//This is always 0
}
}
public void Dispose()
{
_documentStore.Dispose();
}
}
此外,我的测试项目的根目录中有Raven.Studio.xap文件。
我正在使用VS2012和.Net 4.5,如果这有所不同。
答案 0 :(得分:4)
你走了:
static public void WaitForUserToContinueTheTest(EmbeddableDocumentStore documentStore, bool debug = true)
{
if (debug && Debugger.IsAttached == false)
return;
documentStore.SetStudioConfigToAllowSingleDb();
documentStore.DatabaseCommands.Put("Pls Delete Me", null,
RavenJObject.FromObject(new { StackTrace = new StackTrace(true) }),
new RavenJObject());
documentStore.Configuration.AnonymousUserAccessMode = AnonymousUserAccessMode.All;
using (var server = new HttpServer(documentStore.Configuration, documentStore.DocumentDatabase))
{
server.StartListening();
Process.Start(documentStore.Configuration.ServerUrl); // start the server
do
{
Thread.Sleep(100);
} while (documentStore.DatabaseCommands.Get("Pls Delete Me") != null && (debug == false || Debugger.IsAttached));
}
}
答案 1 :(得分:0)
他的回答中没有详细说明如何申请@Ayende Rahien的解决方案,所以我将告诉具体步骤:
如果您在UseEmbeddedHttpServer设置为true的情况下创建EmbeddableDocumentStore,请将其删除,因为WaitForUserToContinueTheTest会为您创建服务器。
在要调试的测试代码中,调用WaitForUserToContinueTheTest方法。
在WaitForUserToContinueTheTest方法之后在Visual Studio中设置断点。
在调试模式下运行时,应自动打开一个名为localhost:8080 / raven / studio.html或:8080 / raven / studio.html的浏览器窗口。
要退出WaitForUserToContinueTheTest中的while循环,请使用Raven HTTP GUI并转到“Documents” - &gt; “所有文件”。在右侧,右键单击“请删除我”行,然后单击“删除”。现在,Visual Studio应继续进行测试。
(顺便说一句,我希望RavenDB团队能够更好地改进单元测试文档。)