单元测试RavenDB

30

在我的单元测试中,我为每个测试设置一个完全空的IDocumentSession。我是这样做的:

[SetUp]
public void SetUp()
{
  _store = new EmbeddableDocumentStore
  {
     RunInMemory = true
  };

  _store.Initialize();

  Session = _store.OpenSession();
}

我认为这可能是我的测试有点慢的原因。我想知道是否有一个简单的命令可以从数据库中删除所有文档。

我想知道的是:如果我能做到这一点,是否会提高性能。

4个回答

25

这是使用RavenDB进行单元测试的推荐方法。 不推荐在生产环境中使用,因为它基本上在内存模式下运行。 如果您发现速度较慢,请尝试分析并找出具体拖慢速度的原因。


谢谢。如果这是正确的方法,那我很满意。 - nick

23

尝试使用 RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true

        var _store = new EmbeddableDocumentStore()
        {
            Configuration =
                {
                    RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true,
                    RunInMemory = true,
                }
        };

2
我一开始以为你在开玩笑。不过似乎并没有太大的区别,虽然可能有点点。 - nick
是的,当我第一次看到这个属性的长度时,我也感到不知所措。然而,如果你查看RavenDB自己的源代码,你会发现他们所有的单元测试都像上面那样创建一个新的存储。我认为这是远比删除所有内容更安全和可靠的方法。我真的不建议那样做。 - Daniel Lang

6

昂贵的调用是 _store.Initialize() -- 这会迫使 RavenDb 每次测试都启动一个新数据库。在大多数情况下,每套测试运行一个单一的数据库就可以了。

另一个选择是使用 RavenDb 的 ID 的特性来给你的测试创建命名空间。如果真正的问题是重复键错误,并且通过其它方式来避免难以处理的清理工作,这非常方便。


就您的第一个评论而言,那基本上是我想的。就您的建议而言,对于我所需要的,这似乎是很多工作,但我会查看一下。谢谢Wyatt。 - nick

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接