我怎样才能模拟Server.HtmlEncode - 返回null引用

时间:2010-11-16 10:09:40

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

我正在尝试模拟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,因为期望被设置替换。

提前致谢, ·阿尔

2 个答案:

答案 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);