2010-11-16 39 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);