【问题标题】:Unit Testing RavenDB单元测试 RavenDB
【发布时间】:2011-09-23 18:39:46
【问题描述】:

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

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

  _store.Initialize();

  Session = _store.OpenSession();
}

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

我想知道的是:我是否可以做到这一点,以及它是否会提高性能。

【问题讨论】:

    标签: unit-testing ravendb


    【解决方案1】:

    这是使用 ravendb 进行单元测试的推荐方法 不推荐用于生产基本上在内存模式下运行 如果您发现这很慢,请尝试分析并找出究竟是什么让事情变慢

    【讨论】:

    • 谢谢。如果这是要走的路,那我很高兴
    【解决方案2】:

    尝试使用RunInUnreliableYetFastModeThatIsNotSuitableForProduction = true

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

    【讨论】:

    • 一开始我以为你在开玩笑。不过,这似乎并没有太大的区别,虽然可能有一点
    • 是的,我第一次看到这个属性的长度时也不知所措。但是,如果您查看 RavenDB 自己的源代码,您会发现他们所有的单元测试都像上面那样创建了一个新存储。它认为这是迄今为止创建新内容而不是删除所有内容的最安全和最安全的方法。我真的不建议这样做。
    【解决方案3】:

    昂贵的调用是_store.Initialize()——你迫使 RavenDb 每次测试都建立一个新数据库。在大多数情况下,每个测试套件运行一个数据库即可。

    另一种选择是使用性质或 RavenDb 的 ID 来命名您的测试。如果真正的问题是重复的键错误或其他工程问题,那么这非常方便,因此您不会进行讨厌的清理。

    【讨论】:

    • 就您的第一条评论而言,这几乎就是我的想法。就您的建议而言,我需要做的工作似乎很多,但我会看看。谢谢怀亚特
    【解决方案4】:

    我知道这是一个老问题,但从 RavenDB 2.0(尚不稳定)开始,有一个 Raven Test Helper 作为 Nuget 包提供,在单元测试 RavenDB 时非常有用。

    http://ravendb.net/docs/samples/raven-tests/createraventests?version=2.0

    http://nuget.org/packages/RavenDB.Tests.Helpers/2.0.2198-Unstable

    【讨论】:

      猜你喜欢
      • 2012-05-12
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多