2012-04-16 17 views
2

私はRavenDbを模擬する方法について多くの質問を読んだ。共通の答えがあります: "しないでください"RavenDbを模擬して

これは私を奇妙な状況に置く。インターフェイスを模擬するための私の最大の理由の1つは、コードがエラーにどのように反応するかをテストすることです。

エラーの原因となるオブジェクトをモックできない場合は、エラーを注入するのは非常に複雑になることがあります。

私はここで間違った方向に考えていますか?

//lg

答えて

7

エラーをシミュレートするにはどうすればよいですか? (EmbaddedDocumentStoreを使用して)メモリデータベースを作成し、ただを実行します。エラーをシミュレートする必要はありません。

+0

は、例えば、このスレッドを参照してください。 d0d08a329dd099db/0e74ed4368a3db90?show_docid = 0e74ed4368a3db90 –

0

あなたが認識している場合、私は知らないが、RavenDBは、ユニットテストのための優れたヘルパーを持っています。

あなたがしなければならない唯一のことは、以下に示すようにRavenTestBaseを実装することです:http://groups.google.com/group/ravendb/browse_thread/thread/:

[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()); 
     } 
    }}