У меня есть метод 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 не имеет ссылочной идентичности, поэтому инициализация новой переменной IUser с нулевым значением не помогает.
Итак, как мне создать метод-заглушку, который возвращает что-то разумное при передаче нулевого аргумента?