2012-04-16 121 views
2

我读过很多关于如何模拟RavenDb的问题。有一个共同的答案:“不”嘲笑RavenDb

这使我陷入了一个奇怪的情况。嘲笑接口的最大原因之一是测试我的代码如何对错误做出反应。

如果无法模拟可能导致错误的对象,那么注入错误可能非常复杂。

我在想错误的方向吗?

// lg

回答

7

为什么要嘲笑模拟错误?创建一个内存数据库(使用EmbaddedDocumentStore),并且只需的错误,不需要模拟它。

+0

看到这个主题,例如:http://groups.google.com/group/ravendb/browse_thread/thread/ d0d08a329dd099db/0e74ed4368a3db90?show_docid = 0e74ed4368a3db90 – 2012-04-19 19:25:01

0

我不知道你是否知道,但RavenDB有优秀的单元测试帮手。

你必须做的唯一的事情是落实RavenTestBase如下图所示:

[TestFixture] 
public class RavenDummyTests : RavenTestBase 
{ 
    private IDocumentStore _documentStore; 


    [SetUp] 
    public void Setup() 
    { 
     _documentStore = NewDocumentStore(); 
    } 

    [TestFixtureTearDown] 
    public void TestFixtureTearDown() 
    { 
     _documentStore.Dispose(); 
    } 

    [Test] 
    public void Search_And_Where_Result_In_An_And() 
    { 
     using (var db = _documentStore.OpenSession()) 
     { 
      db.Store(_oscar); 
      db.Store(_max); 
      db.Store(_tiger); 
      db.SaveChanges(); 
     } 

     WaitForIndexing(_documentStore); // <== very helpful 

     using (var db = _documentStore.OpenSession()) 
     { 
      var query = db.Query<Cat>().Search(cat => cat.Color, "gray").Where(cat => cat.Name == "max"); 
      var list = query.ToList(); 

      Assert.IsEmpty(list); 
      Assert.AreEqual("Color:(gray) AND (Name:max)", query.ToString()); 
     } 
    }}