相关疑难解决方法(0)

如何使用VirtualPathUtility.GetAbsolute方法在单元测试代码时模拟上下文

我正在对使用VirtualParthUtility.GetAbsolute的代码运行单元测试,但是在模拟上下文时遇到了问题.

我已经用Moq设置了一个模拟上下文,如下所示

    private Mock<HttpContextBase> MakeMockHttpContext(string url) // url = "~/"
    {
        var mockHttpContext = new Mock<HttpContextBase>();

        // Mock the request
        var mockRequest = new Mock<HttpRequestBase>();
        mockRequest.Setup(x => x.ApplicationPath).Returns("/");
        mockRequest.Setup(x => x.Path).Returns("/");
        mockRequest.Setup(x => x.PathInfo).Returns(string.Empty);
        mockRequest.Setup(x => x.AppRelativeCurrentExecutionFilePath).Returns(url);

        mockHttpContext.Setup(x => x.Request).Returns(mockRequest.Object);

        // Mock the response
        var mockResponse = new Mock<HttpResponseBase>();
        mockResponse.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())).Returns((string s) => s);

        mockHttpContext.Setup(x => x.Response).Returns(mockResponse.Object);

        return mockHttpContext;
    }
Run Code Online (Sandbox Code Playgroud)

并将其附加到MVC控制器

_myController.ControllerContext = new ControllerContext(MakeMockHttpContext("~/").Object, new RouteData(), _slideSelectorController);
Run Code Online (Sandbox Code Playgroud)

测试期间运行的代码命中行:

venue.StyleSheetUrl = VirtualPathUtility.ToAbsolute(venue.StyleSheetUrl); // input like "~/styles/screen.css"
Run Code Online (Sandbox Code Playgroud)

每次运行时,它都会进入System.Web.VirtualPathUtility,问题是返回的"VirtualParthString"总是抛出异常:

 public static …
Run Code Online (Sandbox Code Playgroud)

model-view-controller unit-testing moq mocking

6
推荐指数
1
解决办法
2559
查看次数