ユーザーとしてnull引数を処理できるcanUserReadメソッドがあります(ユーザーがログインしていない場合があるため)。
ここで、メソッドの動作を反映するスタブを作成したいと考えています。私は試した:
IAccessRightsManager stubAccessRights = new
MockRepository.GenerateStub<IAccessRightsManager>();
// if there is no user logged in
stubAccessRights.Stub(ar => ar.canUserRead(null, confidentialDocument))
.Return(false); //doesn't compile
stubAccessRights.Stub(ar => ar.canUserRead(null, nonConfidentialDocument))
.Return(true); //doesn't compile
// if there is a user without confidentiality clearance logged in
stubAccessRights.Stub(ar => ar.canUserRead(nonPrivilegedUser, confidentialDocument))
.Return(false);
stubAccessRights.Stub(ar => ar.canUserRead(nonPrivilegedUser, nonConfidentialDocument))
.Return(true);
// if there is a user with confidentiality clearance logged in
stubAccessRights.Stub(ar => ar.canUserRead(privilegedUser, confidentialDocument))
.Return(true);
stubAccessRights.Stub(ar => ar.canUserRead(privilegedUser, nonConfidentialDocument))
.Return(true);
null は IUser 型ではないため、これはコンパイルされません。また、null には参照 ID がないため、新しい IUser 変数を null で初期化しても役に立ちません。
では、null 引数が渡されたときに意味のあるものを返すスタブ メソッドを作成するにはどうすればよいでしょうか。