クラスであるパラメーターを検証しようとしています。テスト中のコードは問題ありません。バグはテスト中です。
私は2つの方法を試しましたが、どちらも失敗しました。
私の試みは次のとおりです。
1:
this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions()
{
Width = 256,
Height = 256,
}));
2番目のパラメーターとして渡されたオブジェクトに同じプロパティがある場合でも、これは常に失敗します。最初のパラメーターは問題なく検証されています。
2:
this.MockImageResizeFilter.Setup(m => m.Filter(It.IsAny<byte[]>(), It.IsAny<ImageFilterOptions>()))
.Callback<byte[], ImageFilterOptions>((data, options) =>
{
Assert.AreEqual(this.UploadedFileData, data, "data");
Assert.AreEqual(filterOptions.Width, options.Width, "Width");
Assert.AreEqual(filterOptions.Height, options.Height, "Height");
}
);
失敗する場合でも、これは常に合格です。コールバックのアサートは失敗しますが、例外は外部コンテキストに渡されないため、テストは常に合格します。
私が間違っていることを見つけるのを手伝ってもらえますか?
最初の試みは、達成したいことに近いものです。
失敗する理由は、Moqは(おそらく)カバーの下で_Object.Equals
_を使用して、メソッドが呼び出されたImageFilterOptions
パラメーターがVerify
の呼び出しで指定したものと同じインスタンスであるかどうかをテストするためです。
Verify
でnew ImageFilterOptions()
を作成するため、それらを同じインスタンスにすることはできません。
この方法でパラメーターチェックを実行する代わりに、Moqの_It.Is
_構文を使用して、パラメーターが予期されたものであることを検証する式を提供できます。
あなたの場合、パラメーターがImageFilterOptions
型であり、Width
とHeight
の両方が_256
_に設定されていることを確認する必要があります。それを可能にする式は次のとおりです。
_It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)
_
したがって、Verify
への呼び出しは次のようになります。
_this.MockImageResizeFilter.Verify(m => m.Filter(
this.UploadedFileData,
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)));
_