Вы тестируете на неправильном уровне. [Авторизовать] атрибут гарантирует, что маршрутизация механизм никогда не будет вызывать тот метод для неавторизованного пользователя - RedirectResult будет на самом деле происходить из маршрута, не из Вашего метода контроллера.
Хорошие новости - уже существует тестовое покрытие для этого (как часть исходного кода платформы MVC), таким образом, я сказал бы, что Вы не должны волноваться об этом; просто удостоверьтесь, что Ваш метод контроллера делает правильную вещь , когда это называют, и доверяйте платформе для не вызова его при неправильных обстоятельствах.
РЕДАКТИРОВАНИЕ: Если Вы захотите проверить присутствие атрибута в Ваших модульных тестах, то необходимо будет использовать отражение для осмотра методов контроллера следующим образом. Этот пример проверит присутствие Авторизовать атрибута на методе ChangePassword POST в 'Новой демонстрации' Проекта ASP.NET MVC 2, это установлено с MVC2.
[TestFixture]
public class AccountControllerTests {
[Test]
public void Verify_ChangePassword_Method_Is_Decorated_With_Authorize_Attribute() {
var controller = new AccountController();
var type = controller.GetType();
var methodInfo = type.GetMethod("ChangePassword", new Type[] { typeof(ChangePasswordModel) });
var attributes = methodInfo.GetCustomAttributes(typeof(AuthorizeAttribute), true);
Assert.IsTrue(attributes.Any(), "No AuthorizeAttribute found on ChangePassword(ChangePasswordModel model) method");
}
}
Вам нужно чтобы проверить значение Form.ModifierKeys, чтобы узнать, был ли нажат Control, например:
btn.Click += new EventHandler(btn_Click);
private void btn_Click(object sender, EventArgs e)
{
if (Form.ModifierKeys == Keys.Control)
{
// Do Ctrl-Left Click Work
}
}