您的问题是,代码使用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