我需要对这种方法进行单元测试。我正在使用moq作为我的模拟框架,如果这有帮助的话。
[AcceptVerbs(HttpVerbs.Get)]
public RedirectToRouteResult LogOff()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Post");
}
欢呼:)
编辑:主要是我想知道的FormsAuthentication。我应该测试一下吗?我想我需要模拟一个Identity然后检查IsAuthenticated是否为假?
答案 0 :(得分:4)
您可以为FormsAuthentication创建一个包装器并将其存根
formsAuthentication = mockery.Stub<IFormsAuthentication>();
并做这样的事情。
With.Mocks(mockery)
.Expecting(() => Expect.Call(() => formsAuthentication.SignOut()))
.Verify(() => controller.LogOff());
/* Asserts to go here */
在测试FormsAuthentication方面。在其他地方进行测试,分离关注点和所有这些。
此操作的测试仅需要检查是否已调用SignOut方法以及是否已发生重定向。请记住,您正在测试操作,而不是操作中的方法。您不会在提交操作中测试数据存储工作,您将模拟所有这些。
答案 1 :(得分:2)
这是你用Moq做的。假设您已创建IFormsAuthentication
作为包装器:
[Test]
public void LogOffSignsUserOut()
{
var controller = new MyController();
var authMock = new Mock<IFormsAuthentication>();
controller.Authentication = authMock.Object; //inject your mock
controller.LogOff()
authMock.Verify(x=>x.SignOff(), Times.Once());
}