2017-04-17 11 views
-2

C#では、オブジェクトのリストをどうやって嘲笑しますか?c#オブジェクトのリストをモックする方法

私は練習を試みており、ユニットテストのアレンジセクションで、 "Bookオブジェクトのリストをモックする"必要があると指定しています。

Bookオブジェクトのモックリストを作成する構文は何ですか?私は偽のブックオブジェクトを作成して書籍のリストに追加しようとしましたが、これは機能しませんでした。

public void Test_GetAllBooks_ReturnsListOfBooksItReceivesFromReadAllMethodOfReadItemCommand_WhenCalled() 
{ 
    //Arrange 
    Mock<ReadItemCommand> mockReadItemCommand = new Mock<ReadItemCommand>(); 
    Catalogue catalogue = new Catalogue(mockReadItemCommand.Object); 

    Mock<Book> mockBook1 = new Mock<Book>(); 
    Mock<Book> mockBook2 = new Mock<Book>(); 
    List<Book> mockBookList = new List<Book>(); 
    mockBookList.Add(mockBook1); 
    mockBookList.Add(mockBook2); 

    mockReadItemCommand.Setup(r => r.ReadAll()).Returns(mockBookList); 

    //Act 
    List<Book> actual = catalogue.GetAllBooks(); 

    //Assert 
    Assert.AreSame(mockBookList, actual); 

} 

これは私がタイプ帳の私のリストにモック本を追加しようとした2行に、両方のCS1503、私に2つのコンパイルエラーを与えています。

+0

あなたは[MCVE]でこれまでにしようとしているものを表示します。おそらくより良い助けが提供されるかもしれません。その運動のすべては、既に尋ねられているので、このサイトで見つけることができます。 – Nkosi

+1

宿題の質問はあなたがこれまでに試したことを示して、あなたが立ち往生している場所を特定しなければならないので、私はこの質問をトピックとして閉じようとしています。書かれているように、これはちょうど "おまえのコードです。" – EJoshuaS

+0

申し訳ありません、みんな、私はソフトウェア開発(したがって質問)と新しいStackOverflowに新しいです - 私の質問にその反応の必要はありません。私は、私の質問は、具体的にどのように私はオブジェクトのリストを嘲笑に行くかについて明確であると思った。上記のコードを見てください。 –

答えて

1

テスト中のメソッドを実行するときに返される疑似/模擬データを表すブックのリストを作成するだけです。偽のデータにMoqを使用する必要はありません。テスト中のシステムの依存関係(ReadItemCommand)を模擬するために使用部品番号(Catalogue

public void Test_GetAllBooks_ReturnsListOfBooksItReceivesFromReadAllMethodOfReadItemCommand_WhenCalled() 
{ 
    //Arrange 
    var mockReadItemCommand = new Mock<ReadItemCommand>(); 
    var catalogue = new Catalogue(mockReadItemCommand.Object); 

    var expected = new List<Book>(){ 
     new Book { 
      Title = "Book1", 
      //populate other properties 
     }, 
     new Book { 
      Title = "Book2", 
      //populate other properties 
     } 
    }; 

    mockReadItemCommand 
     .Setup(_ => _.ReadAll()) 
     .Returns(expected); 

    //Act 
    var actual = catalogue.GetAllBooks(); 

    //Assert 
    Assert.AreSame(expected, actual); 
} 
+0

ソリューションNkosiありがとう。それはコンパイルエラーの問題を解決しました。しかし、この演習では、「ブックオブジェクトのリストをモックする必要があります」と「モックブックリストを返すには、モックReadItemCommandのReadAll()メソッドをスタブする必要があります」と指定されています。実際のブックオブジェクトのモックリストやモックリストは必要ありませんか?私は、テストされているオブジェクトだけが現実でなければならず、テストで使用される他のすべてのオブジェクトはモックでなければならないと言われました。 [これらが愚かな質問であれば申し訳ありませんが、私は非常に混乱して嘲笑しています!] –

+0

@MichaelHenniganブックリストは模擬データソースとして機能しています。これらのデータは、ライブ永続データからの実際のデータではありません。したがって、彼らはモックです。実際のモックは依存関係であり、書籍のリストはそのモックされた機能の一部です。 Bookオブジェクトを実際に模擬する唯一の時間は、実際のオブジェクトが孤立した被写体のテストに影響するかどうかです。 – Nkosi

+0

説明ありがとう!私は最終的に今それを得ると思います。 –

0

私は右のあなたを得た場合、あなたはリストのクローンを作成することができます。たとえば ここに示すように:

How do I clone a generic list in C#?

あなたが同じ方法でそれを複製することができ、またはその代わりにあなたがして、リストを自分でコピーすることができます新しいリストを作成し、ソースリストから各要素のコピーを追加します。 助けてくれることを願っています。

+0

こんにちはコヨーテ。アドバイスをいただきありがとうございます。私はC#に慣れているので、私と一緒にいてください。 Moqを使って模倣するのと同じクローニングですか?モックを使って同じことを達成できますか?私は具体的にこの練習にMoqを使うように求められました。 –

関連する問題