我正在try 对执行证书验证的服务进行单元测试.它将给定的 fingerprint 与存储在Azure密钥库中的证书上的 fingerprint 进行比较. 我的代码运行得很好,但现在我正在try (使用Moq)对其进行单元测试.
为了进行测试,我需要访问/moq检索到的证书的 fingerprint (证书是类型为KeyVaultCertificateWithPolicy
的对象).
我的问题是,当我模拟证书的Properties
对象时,Moq不能模拟X509Thumbprint
,因为setter是内部的.
我收到以下代码的错误信息:
System.NotSupportdException:不支持的表达式:x=>;x.X509Thumbprint 不能在设置/验证表达式中使用不可重写的成员(此处为:证书属性.Get_X509Thumbprint).
这是我的单元测试代码的摘录:
var azCertificateProps = new Mock<CertificateProperties>();
azCertificateProps.SetupGet(x => x.X509Thumbprint).Returns(testThumbprint); // Fails here
var azCertificate = new Mock<KeyVaultCertificateWithPolicy>(azCertificateProps.Object);
作为参考,这是我try 进行单元测试的实际代码(简化)
public KeyVaultCertificateWithPolicy ExpectedCertificate { get; set; }
public async Task<bool> ValidateCertificate(X509Certificate2 clientCertificate, CancellationToken cancellationToken)
{
return clientCertificate.Thumbprint == BitConverter.ToString(ExpectedCertificate.Properties.X509Thumbprint).Replace("-", "");
}
我try 实例化KeyVaultCertificateWithPolicy
对象本身,但仍然找不到以任何方式传递我的 fingerprint 的方法.