相信这是可能的。这一直在单元测试中完成。我个人使用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();
所以,我会再使用基本的HTTP认证(通过HTTPS/SSL明显),并检查在覆盖这些凭据' AuthorizeCore();'方法?? – Nate 2010-03-30 19:42:15
当然。你正在编写覆盖的逻辑,所以你可以做任何你想让它返回true或false的东西。 – 2010-03-30 20:05:53
我知道,我想我的问题是,这样做有什么意义,我可能不知道?它安全吗?假设URI是HTTPs和ssl加密的,那么凭证是否也加密? – Nate 2010-03-30 20:11:39