3

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

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

干杯:)

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

4

2 回答 2

4

您可以为 FormsAuthentication 创建一个包装器并将其存根

formsAuthentication = mockery.Stub<IFormsAuthentication>();

并做这样的事情。

With.Mocks(mockery)
    .Expecting(() => Expect.Call(() => formsAuthentication.SignOut()))
    .Verify(() => controller.LogOff());

 /* Asserts to go here */

在测试 FormsAuthentication 方面。在其他地方测试这个,关注点分离等等。

此操作的测试只需要检查 SignOut 方法是否已被调用以及是否发生了重定向。请记住,您正在测试操作,而不是操作中的方法。您不会在提交操作中测试数据存储工作,您会模拟所有这些。

于 2009-04-09T13:15:03.080 回答
2

这就是您使用 Moq 执行此操作的方式。假设您已创建 aIFormsAuthentication作为包装器:

[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());
}
于 2012-12-29T14:38:09.377 回答