Вы можете создать легкую оболочку с помощью Predicate / Func.
public static Predicate<string> IsUserInRole = role => Roles.IsUserInRole(role);
Затем используйте IsUserInRole () вместо Roles.IsUserInRole ().Во время выполнения вы получаете такое же поведение.Но во время тестирования вы можете переопределить функцию так, чтобы она не обращалась к RoleProvider
MyClass.IsUserInRole = role => true;
Если вы предпочитаете не иметь публичную статику, вы можете внедрить предикат через конструктор и сохранить его как приватныйтолько для чтения.
class MyClass
{
private readonly Predicate<string> IsUserInRole;
MyClass(Predicate<string> roleChecker) { this.IsUserInRole = roleChecker }
MyClass() : this(role => Roles.IsUserInRole(role)) { }
}
Если вы используете Moq, вы можете вернуть mock, а затем контролировать возвращаемое значение и / или проверить, был ли вызван метод.И проверьте, какое значение параметра было отправлено в предикат.
Mock<Predicate<string>> mockRoleChecker = new Mock<Predicate<string>>();
var cut = new MyClass(mockRoleChecker.Object);
var expectedRole = "Admin";
mockRoleChecker.SetReturnsDefault<bool>(true); // if not specified will return false which is default(bool)
cut.MyMethod();
mockRoleChecker.Verify(x => x(expectedRole), Times.Once());