モック(MoqまたはRhino Mocks)インターフェイスのメソッドに渡された値を見つける方法は?
-
05-07-2019 - |
質問
Moq を使用していますが、別のモックフレームワークに簡単に交換できます必要な場合。
インターフェイスが定義されています:
public interface IBaseEngineManagerImp
{
void SetClientCallbackSender(IClientCallbackSender clientCallbackSender);
}
次に、 IBaseEngineManagerImp をモックします
mockEngineManagerImp = new Mock<IEngineManagerImp>();
EngineManager engineManager = new EngineManager(mockEngineManagerImp.Object);
engineManager は、値を渡して SetClientCallbackSender を呼び出します。
ユニットテストから SetClientCallbackSender に渡された値を取得するにはどうすればよいですか
(テストの一環として clientCallbackSender のメソッドをいくつか呼び出したい)
解決
モックの.Callbackメソッドを使用して、SetClientCallbackSenderメソッドに渡されたパラメーターの関数を呼び出すことができます。
mockEngineManagerImp.Setup(x => x.SetClientCallbackSender(It.IsAny<IClientCallbackSender>()))
.Callback((IClientCallbackSender c) => c.DoSomething());
他のヒント
rhinoでは、 WhenCalled
または GetArgumentsForCallsmadeOn
を使用します:
Thingy argument;
mock
.Stub(x => x.SetClientCallbackSender(Arg<IClientCallbackSender>.Is.Anything))
.WhenCalled(call => argument = (Thingy)call.Arguments[0]);
// act
//...
// assert
Assert.AreEqual(7, argument.X);
この実装の問題は、最新の引数を取得することです。 (Is.Anythingの代わりに)引数の制約を使用することで、これをさらに制御できます。
または
// act
//...
// assert
Thingy argument =
(Thingy)mock
.GetArgumentsFormCalsMadeOn(x => x.SetClientCallbackSender(
Arg<IClientCallbackSender>.Is.Anything))[0][0];
GetArgumentsFormCalsMadeOn
の問題は、2次元配列、各呼び出しの行、各引数の列を返すことです。したがって、テスト対象のユニットが実行するコールの数を正確に知る必要があります。
所属していません StackOverflow