Конечно, это возможно. Это делается в модульном тестировании все время. Лично я использую RhinoMocks вместе с MVCContrib.TestHelper для вызова действий моего контроллера, как аутентифицированных, так и не аутентифицированных. Вот пример кода, который я использую для тестирования своих контроллеров:
private MockRepository _mocks = new MockRepository();
public ControllerTestBase()
{
}
public static T GetController<T>()
{
return this.GetController<T>(null);
}
public T GetController<T>(BPUser authenticatedUser)
{
TestControllerBuilder testContBuilder = new TestControllerBuilder();
if (authenticatedUser != null)
{
var identity = _mocks.DynamicMock<IIdentity>();
SetupResult.For(identity.IsAuthenticated).Return(true);
SetupResult.For(identity.Name).Return(authenticatedUser.ID.ToString());
_mocks.Replay(identity);
var pAttrs = new System.Collections.Hashtable();
pAttrs["UserID"] = authenticatedUser.ID.ToString();
pAttrs["UserName"] = authenticatedUser.UserName;
testContBuilder.HttpContext.User = new UserPrinciple(identity, new string[] { }, pAttrs);
}
return testContBuilder.CreateController<T>();
}
Там есть немного пользовательских вещей для моей реализации IPrinciple, но, надеюсь, это начало.
Редактировать - Пример использования
Вот как бы вы использовали это:
var authenticatedUser = SomeCodeToGetMyUser();
var controller = ControllerTestBase.GetController<YourController>(authenticatedUser);
controller.UpdateHeartbeat();