mockRepo.Setup(m =>m.GetAllReadingsOn
(latestDate)
.Returns(_filteredReadings);
対。 1つの例外があります。テスト対象のメソッドがそれらを作成するため、比較できない参照型です。この場合、あなたはこの方法で作成されたことを確認するために、プロパティでプロパティを比較する必要があり、正しい参照型を渡されます
mockRepo.Setup(m => m.GetAllReadingsOn(It.Is<SomeComplexObject>(x =>
x.Foo == "foo" &&
x.Bar == "bar" &&
x.Baz == 123)))
.Returns(_filteredReadings);
これビーイングは、日付時刻などの値型で、このアプローチを使用すると、キーストロークの完全な廃棄物であると述べました。
コメント欄には、最初のアプローチがうまくいかない場合の基本的な例があります。あなたは、次のテストを記述しようとした場合、それは無残に失敗します今、明らかに
public SomeResult FooBarBaz()
{
var myModel = new SomeComplexObject();
myModel.Foo = "foo";
myModel.Bar = "bar";
myModel.Baz = 123;
var result = repository.GetTheResult(myModel);
return result;
}
:私たちは、次のメソッドをテストしたいとし
// arrange
var sut = new Sut();
var myModel = new SomeComplexObject();
myModel.Foo = "foo";
myModel.Bar = "bar";
myModel.Baz = 123;
var expected = new SomeResult();
mockRepo
.Setup(m => m.GetAllReadingsOn(myModel)
.Returns(expected);
// act
var actual = sut.FooBarBaz();
// assert
Assert.AreEqual(expected, actual);
具体的な値を使用すると、あなたは、この具体的な値への呼び出しを制限する意味。一方、複数の(または任意の)値にマッチすることができます。率直に言えば、具体的な値は頻繁には使用されず、「平易な方法で取得して渡す」ことによって理解できる内容について詳しく説明することができます。 –
'd => d == _ latestDate'は非常に基本的な例です。あなたはここでもっと興味深いことをすることができます... – wimh