1

我正在为控制器的方法进行单元测试。在以下方法中,我想检查返回类型是否为ViewResult

    [HttpGet]
    public ActionResult AddRepresentative(Guid businessUnitId)
    {
        var roles = Roles.GetAllRoles();
        var model = new AddRepresentativeModel
        {
            BusinessUnitId = businessUnitId,
            Roles = roles.Select(r => new SelectListItem
            {
                Value = r,
                Text = r,
            })
        };
        return View(model);
    }

这就是我为测试所做的

   [TestMethod]
    public void AddRepresentative_Get_Action_RendersView()
    {
        var result = _controller.AddRepresentative(Guid.Empty);

        Assert.IsInstanceOfType(result,typeof(ViewResult));
    }

错误

测试方法 AdminPortal.Tests.Controller_Test.Customer.BusinessUnitControllerTests.AddRepresentative_Get_Action_RendersView 抛出异常:System.Configuration.Provider.ProviderException:角色管理器功能尚未启用。

问题:在 HttpGet 方法中收集角色列表不是一个好习惯吗?

为了使测试通过,我需要在控制器或测试方法中进行一些更改吗?

出现错误是因为我使用的是 RhinoMock 吗?

4

1 回答 1

5

在 HttpGet 方法中收集角色列表不是一个好习惯吗?

它没有任何问题。

为了使测试通过,我需要在控制器或测试方法中进行一些更改吗?

是的,您可以将一个 app.config 文件添加到您的单元测试项目中,并在该部分中注册一个角色管理器,<system.web>就像您在实际应用程序中所做的那样。否则,您认为该Roles.GetAllRoles();方法将从哪里获取任何数据?或者,您可以将此调用包装在可以在单元测试中模拟的服务层中。

出现错误是因为我使用的是 RhinoMock 吗?

不。

于 2013-08-15T11:47:52.647 回答