2011-02-03 15 views
5

私はこのモック(Moqフレームワークを使用して)がどのように動作するのかを考えていますが、voidを返すメソッドと少し混乱してきました。Moq a voidメソッド

元のオブジェクトは、次のメソッド/プロパティがあります。

void Add(Person entity); 
void Save(); 
IQueryable<Person> Persons; 

Addメソッドは、(それはLINQ to SQLはだ)InsertOnSubmitを呼び出し、SaveメソッドはContext.SubmitChanges()を呼び出します。 PersonのプロパティはTable<News>オブジェクトを返します。

私は明らかにこれらの方法を嘲笑に行くのか分かりませんが、私は明らかにReturns()を使用できません。

私のデザインは、実際にオブジェクトを正しくモックすることができないという意味ですか?

+0

それ以上の文脈がなければ、良い答えを与えるのは少し難しいです。 – mfloryan

答えて

3

テストする内容によって異なります。

相互作用をテストするクラスと他のクラスとの間でテストする場合は、Moqが役立ちます。

上記のメソッドとプロパティでクラスを使用しているクラスをテストしていると思われる場合は、期待されるパラメータでAddメソッドが呼び出されたかどうかを確認するために、Saveメソッドが呼び出され、結果を読み取るためにPersonsプロパティが参照されているかどうかを確認する。これは、以下の方法で達成することができます:

var mockedClass = new Mock<IDaoClass>(); 
var classUnderTest = ... 

mockedClass.SetupGet(m => m.Persons).Returns(new List<Person>().AsQueryable()); 

classUnderTest.DoSomething(); 

mockedClass.Verify(m => m.Add(It.IsAny<Person>())); 
mockedClass.Verify(m => m.Save()); 

あなたが何か他のものをテストし、これらのメソッドのスタブ実装を提供したい場合は、あなただけのテスト実装を作成したり、機能と部品番号のセットアップを使用して検討する必要があります単純な設定ではなくラムダとして表現されています。