【问题标题】:How to i unit test this method?我如何对这种方法进行单元测试?
【发布时间】:2009-04-09 07:12:46
【问题描述】:

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

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

干杯:)

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

【问题讨论】:

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


    【解决方案1】:

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

    formsAuthentication = mockery.Stub<IFormsAuthentication>();
    

    然后做这样的事情。

    With.Mocks(mockery)
        .Expecting(() => Expect.Call(() => formsAuthentication.SignOut()))
        .Verify(() => controller.LogOff());
    
     /* Asserts to go here */
    

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

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

    【讨论】:

    • so...应该说是用Rhino Mocks完成的.....但是原理是一样的
    • 该死的。我只是不知道如何使用最小起订量来做到这一点:(
    • 抱歉帮不了你,因为我对起订量毫无经验。
    【解决方案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());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      相关资源
      最近更新 更多