【问题标题】:Issue unit testing an asp.net MVC controller that inherits from a custom base controller发布单元测试从自定义基本控制器继承的 asp.net MVC 控制器
【发布时间】:2013-07-19 21:00:44
【问题描述】:

所以我正在使用 Moq 并开始为我的控制器操作编写单元测试。

我的所有控制器都继承自 CustomController 基类,该类提供在构造函数中设置为 Membership.GetUser().ProviderUserKey 的值的 userId 属性。这样我就可以通过传递contactId将userId传递给我的服务层。

这似乎不适用于这个单元测试:

  var serviceMock = new Mock<IFormService>();
        serviceMock.Setup(g => g.GetForm(2)).Returns(new FormViewModel() {ID = 2, Name = "Mock Form"});
        var controller = new FormController(serviceMock.Object);
        var result = controller.Index(2);
        Assert.IsNotNull(result, "View Result is null");

它会在基础 CustomController 上引发异常,并尝试从 Membership.GetUser().ProviderUserKey 设置 userId。

“UnauthorizedAccessException:对路径 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\App_Data' 的访问被拒绝。”

有没有其他人遇到过这个问题或有任何解决方法的想法?

【问题讨论】:

  • 查看您的构造函数可能会有所帮助,但我猜您需要注入一个模拟成员资格提供程序,并根据请求配置您的 DI 容器以使用生命周期。基本上,如果它是一个依赖项,它需要在构造函数中,以便您可以在测试中控制它的行为。见stackoverflow.com/questions/4193484/…

标签: asp.net-mvc unit-testing


【解决方案1】:

您可能忘记在您的 webconfig 中设置会员提供程序:

<system.web>
    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
</system.web>

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    相关资源
    最近更新 更多