如何对这种方法进行单元测试?

时间:2009-04-09 07:12:47

标签: asp.net-mvc unit-testing moq

我需要对这种方法进行单元测试。我正在使用moq作为我的模拟框架,如果这有帮助的话。

[AcceptVerbs(HttpVerbs.Get)]
public RedirectToRouteResult LogOff()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Post");
}
欢呼:)

编辑:主要是我想知道的FormsAuthentication。我应该测试一下吗?我想我需要模拟一个Identity然后检查IsAuthenticated是否为假?

2 个答案:

答案 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());
}
相关问题