3
我有两种方法,OpenCertificateStore和FindCertificateBySubjectName并实现它们如下复杂的操作模拟参考和设置方法:创建使用起订量
public void OpenCertificateStore()
{
if (_certificateStore == default(X509Store))
_certificateStore = new X509Store(StoreLocation.CurrentUser);
_certificateStore.Open(OpenFlags.ReadOnly | OpenFlags.IncludeArchived);
}
public X509Certificate2Collection FindCertificateBySubjectName(string certificateSubjectName)
{
X509Certificate2Collection certificates = new X509Certificate2Collection();
if (_certificateStore != default(X509Store))
{
certificates = _certificateStore.Certificates.Find(X509FindType.FindBySubjectName, certificateSubjectName, true);
}
return certificates;
}
我有如下我的单元测试:
[TestClass]
public class MyHealthTests
{
private Mock<Logger> _logger;
private Mock<MYCertificateManager> _certManager;
[TestInitialize]
public void Initialize()
{
_logger = new Mock<Logger>();
_certManager = new Mock<MYCertificateManager>();
}
[TestMethod]
public void PassName_FindCertiFicatebyName_ShouldReturnValid()
{
MyCertificateHelper myCertHelper = new MyCertificateHelper(_logger.Object,_certManager.Object);
myCertHelper.OpenCertificateStore();
var certNameCollection = myCertHelper.FindCertificateBySubjectName("Valid Cert Name");
Assert.IsNotNull(certNameCollection);
Assert.IsTrue(certNameCollection.Count > 0);
}
}
哪些工作正常,但如果我能找到办法模拟myCertHelper
会好很多。
如果我确定他们,它会返回null,因为它不查询实际的证书存储。
'我'被替换为实际类名,因为我不想公开类名。它有一个客户名称的前缀:) – Simsons
@Simsons没有太多更好的了。这就是命名空间的用途。 – RubberDuck
我对两三个人持怀疑态度。有一些对象首先配置,然后使用Open或其他方法使其可用(请参见SqlConnection)。这种模式有一个名字,但我忘了它......提高伐木事件限制了使用许多高级场景的可能性。甚至几个服务的注入对于Autofac等帮助者来说也不是问题,并且您不必在每个课程中都实施事件提升。 – t3chb0t