2010-11-16 67 views
0

我想模拟Server.HtmlEncode(),但我一直有一个空引用异常。 我是很新,起订量架构,这里是我的代码:我怎样才能嘲笑Server.HtmlEncode - 返回null参考

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因为期望被设置取代。

由于提前,阿恩

回答

8

你可以使用静态HttpUtility.HtmlEncode方法,它工作得很好,你会不会需要模拟它。

另一个重要的评论:控制器与HTML编码无关。这是观点的责任,所以你可能从错误的角度接近这个观点。

+1

我以为是这样,你怎么建议我改变它呢? 我需要进行编码才能将\ r \ n更改为
和其他字符,以便它可以放在数据库中。并将其解码回文本区域。 所以相同的观点需要根据get/post来做。 – Arne 2010-11-16 10:20:16

+0

将它放在数据库中。在渲染时确保在视图中进行HTML编码或使用可以完成这项工作的HTML助手。 – 2010-11-16 10:23:12

+0

得到它谢谢:)! – Arne 2010-11-16 10:28:35

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