Moqを使用してメソッドを2回セットアップしたいと思いますが、最後のメソッドが前のものをオーバーライドしているようです。ここに私の最初のセットアップです:モックで異なるパラメータに対してメソッドを2回セットアップする方法
string username = "foo";
string password = "bar";
var principal = new GenericPrincipal(
new GenericIdentity(username),
new[] { "Admin" });
var membershipServiceMock = new Mock<IMembershipService>();
membershipServiceMock.Setup(ms =>
ms.ValidateUser(username, password)
).Returns(new ValidUserContext {
Principal = principal
});
これは罰金うまくいくが、私は、ユーザー名またはパスワードが上記のようにusername
とpassword
変数ではなく、ある場合、これはnew ValidUserContext()
を返すようにしたいです。これを行うには、私は別の設定を追加しましたが、今回はそれが上記のいずれかをオーバーライドして、常にそれを適用します。
membershipServiceMock.Setup(ms =>
ms.ValidateUser(It.IsAny<string>(), It.IsAny<string>())
).Returns(
new ValidUserContext()
);
部品番号を持つ状況のこのタイプを扱うの最もエレガントな方法は何ですか?
編集
私は、以下の方法の問題点を解決するが、私はこれを処理するより良い方法があると思います。
var membershipServiceMock = new Mock<IMembershipService>();
membershipServiceMock.Setup(ms =>
ms.ValidateUser(It.IsAny<string>(), It.IsAny<string>())
).Returns<string, string>((u, p) =>
(u == username && p == password) ?
new ValidUserContext {
Principal = principal
}
: new ValidUserContext()
);
最初の解決策は、u == usernameとp!= passwordの場合は処理しませんか? –