web-dev-qa-db-ja.com

Rhino Mocksを使用して、テストしているメソッド内で作成されたoutパラメーターをモックします。

次の方法をモックしようとしています。

bool IsLoginValid(LoginViewModel viewModel, out User user);

最初にこれを試しました:

dependency<ILoginService>()
.Stub(serv =>
        serv.IsLoginValid(
            Arg<LoginViewModel>.Is.Equal(a_login_viewmodel),
            out Arg<User>.Is.Anything)
.Return(false);

しかし、それはoutパラメータであるため、失敗します。少し検索して、コードを次のように変更しました。

dependency<ILoginService>()
.Stub(serv => 
        serv.IsLoginValid(
            Arg<LoginViewModel>.Is.Equal(a_login_viewmodel), 
            out Arg<User>.Out(new User()).Dummy))
.Return(false);

それも失敗します。 'new User()'を 'Anything'引数のようなものにする必要があります。私が思うに、それは特定のインスタンスを期待しています。

これを回避する方法はありますか?みんなありがとう。

35
ctrlplusb

「OutRef」オプションを試してください。各outパラメーターの結果を定義するparamsobject []を受け入れます。取得できるのは1つだけなので、必要な結果は1つだけです。これがあなたの状況でうまくいくはずの私が試したものの簡単なモックアップです:

var foo = MockRepository.GenerateStub<IFoo>();
var viewModel = new LoginViewModel();
User temp;
foo.Stub(f => f.IsLoginValid(viewModel, out temp)).OutRef(new User()).Return(false);

User outparam;
Assert.IsFalse(foo.IsLoginValid(viewModel, out outparam));
47
PatrickSteele