您的問題是,代碼使用Request對象來獲取證書,但這不容易單元測試。
我會做的是補充的是,在默認情況下,將使用Request對象返回HttpClientCertificate,但允許重寫實現的功能代表。
對於控制器,補充一點:
internal Func<HttpClientCertificate> HttpClientCertificateGetter =() => {
return Request.ClientCertificate;
}
而在你的控制,而不是使用要求使用HttpClientCertificateGetter。
然後在你的單元測試,你嘲笑的證書,並將其分配給getter函數,就像這樣:
var certMock = new Mock<HttpClientCertificate>();
HttpClientCertificate clientCertificate = certMock.Object;
requestMock.Setup(b => b.ClientCertificate).Returns(clientCertificate);
certMock.Setup(b => b.Certificate).Returns(new Byte[] { });
controller.HttpClientCertificateGetter =() => {certMock.Object};
這需要我來注入客戶端證書到我的控制器,我不想做因爲控制器已經有權訪問它。 – RiceRiceBaby 2013-04-23 19:46:17
只是覆蓋控制器具有'new' – 2013-04-23 19:49:06