【问题标题】:Multiple tests running with RavenDB使用 RavenDB 运行的多个测试
【发布时间】:2013-08-18 10:10:32
【问题描述】:

我正在使用 RavenDB 开发 WebAPI 应用程序。 我有几个 XUnit 测试有类似的大纲:

var checkQuery = session.Query<Resource>().Where(x => x.AliasIds.Any(a => a == alias.Id));
PAssert.Throws<InvalidOperationException>(() => checkQuery.Single());

var testString = Guid.NewGuid().ToString();
Controller.Post(testString);

var res = checkQuery.Single();
PAssert.IsTrue(() => res != null);  

发生的情况是,当我同时运行多个测试时,它们会在该行失败

var res = checkQuery.Single();

例外:

结果消息:System.InvalidOperationException:序列不包含任何元素

我发现了什么:

  • 如果我第一次调用 checkQuery.Single() 时,它会正常工作。
  • 如果我在有问题的行之前添加 Thread.Sleep(1000) 效果很好。

我尝试添加

store.DatabaseCommands.DisableAllCaching();
store.Conventions.ShouldCacheRequest = _ => false;

但它没有帮助。

【问题讨论】:

    标签: c# .net testing ravendb


    【解决方案1】:

    假设 Controller.Post(testString) 正在添加一个新条目,您可能只是有一个陈旧的索引。在现实世界中,发布和查询之间会经过一段自然的时间。在单元测试中,您没有这种延迟,因此通常在您的索引中提供以下内容:

    .Customize(x => x.WaitForNonStaleResults())
    

    这不是您在生产中应该做的事情。你可以阅读更多in the documentation here

    【讨论】:

    • 还没有检查它是否是一个答案,但是有没有办法在某处的商店配置中设置它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2011-12-24
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多