3

Moqには、次を使用してゼロからモックを作成できる新しい構文があります。

var newMock = Mock.Of<IInterface>(m => m.GetSomeValue() == value);

モックを自分で作成しない場合もあります (例: AutoData Theoriesを使用する場合)。次に、古い構文を使用してモックを設定する必要があります

existingMock.Setup(m => m.GetSomeValue()).Returns(value);

私はこれが2つの理由で好きではありません

  1. 読みにくいです(私見)
  2. 古い構文と新しい構文を混在させる必要があります。

次のようなものを使用して既存のモックをセットアップしたいと思います

existingMock.SetupUsingNewSyntax(m => m.GetSomeValue() == value);
  • これは可能ですか?
  • いいえの場合、それはロードマップにありますか?
    既存のモックにも新しい構文が導入されると思います。
  • いいえの場合、どうすればこれを自分で実装できますか?

Mock.Get<>()と の使い方、およびMock.Of<>()モックとモック オブジェクトがどのように関連し ているかは既に知っています。

Moq は、Linq を Mocks に提供する最初で唯一のフレームワークでもあるため、上記と同じ動作をより簡潔に実現できます。

新しいモックを作成してセットアップするには、古い方法と新しい簡潔な方法の 2 つの方法があるため、既存のモックのセットアップも含めて引き継がれることを期待していました。

4

1 に答える 1

1

ソリューション コードをGistにアップロードしました。簡単に言うと、gist コードは、元のコードからモック インスタンスを作成するロジックを削除しただけです。MockQueryable<T>そのためには、内部クラスであるクラスにアクセスする必要があるため、.NET リフレクションを使用しました。

リフレクション コードを回避するために、MockQueryable<T>Moq ソースからテスト コードにコードをコピーできます。また、必要に応じて関連するいくつかの内部型もコピーできますMockQueryable<T>

于 2014-09-01T03:54:58.130 に答える