我正在尝试模拟Server.HtmlEncode(),但我一直有一个空引用异常。 我是Moq框架的新手,这是我的代码:
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
server.Setup(svr => svr.HtmlEncode(It.IsAny<string>())).Returns((string s) => s);
context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(session.Object);
context.Setup(ctx => ctx.Server).Returns(server.Object);
我也尝试了以下内容:
context.Setup(ctx => ctx.Server.HtmlEncode(It.IsAny<string>())).Returns((string s) => s);
我找到了一个解决方案,但它似乎已过时solution,因为期望被设置替换。
提前致谢, ·阿尔
答案 0 :(得分:8)
您可以使用静态HttpUtility.HtmlEncode方法,它可以正常运行,您无需模拟它。
另一个重要的评论:控制器与HTML编码无关。这是视图的责任,所以你可能从错误的角度来看待它。
答案 1 :(得分:1)
我实际上找到了一个解决方案。
var server = new Mock<HttpServerUtilityBase>(MockBehavior.Strict);
server.Setup(ctx => ctx.HtmlEncode(It.IsAny<string>())).Returns((string s) => s);
server.Setup(ctx => ctx.HtmlDecode(It.IsAny<string>())).Returns((string s) => s);