web-dev-qa-db-ja.com

MoqのSetupSetとSetupPropertyの違い

SetupSetがMoqでプロパティを設定する古い方法であることを理解しています。現在は廃止されていますが、私のインテリセンスは両方を示しており、いずれも廃止とマークされていません。誰かが私にそれらの実際の違いを指摘できますか?

12
DotNetInfo

私はおそらく次のような違いの1つを見つけました。

読み取り専用プロパティをモックしようとしている場合は、SetupGetを使用する必要があります。その場合、SetupPropertyは機能しません。一方、期待値を設定する場合は、SetupPropertyを非読み取り専用プロパティに使用できます。

たとえば、以下は機能しません

public interface IXyz
{
  int Id { get; }
}

//Test Side Code    
var _mock = new Mock<IXyz>();
_mock.SetupProperty(x => x.Id, 1054);

上記のコードを実行しようとすると、System.ArgumentException:PropertyIXyz.Idは読み取り専用であると表示されます。

したがって、コードを以下に変更すると、機能します

_mock.SetupGet(x => x.Id).Returns(1054);
18
DotNetInfo

SetupSet は廃止としてマークされていません。メッセージで廃止としてマークされている ExpectSet について考えているかもしれません、 "ExpectSetはSetupSetに名前が変更されました。"

SetupSetを使用すると、プロパティが設定されることを期待できます。

mock.SetupSet(x => x.Prop = "bar").Verifiable();
mock.Object.Prop = "foo";
mock.Verify();   // fails

SetupPropertyは、モックでプロパティをスタブ化する方法のように見えます(ドキュメントのSetupSetと同じセクションを参照してください)。

13
Jeff Ogata