我有两个方法,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
,情况会好很多。
如果我做了mok,它会返回null,因为它不会查询实际的证书存储。
答案 0 :(得分:2)
你如何模仿MyCertificateHelper
?
你没有。
这样做没有任何好处。如果你这样做了,那么测试中的所有类都将被模拟掉,你将不再真正测试任何代码。此时,您也可以删除测试。它不会做任何事情,但会花费你的钱来维持它。
My
前缀所有内容是没用的。比无用更糟糕,它是嘈杂和分散注意力的。算了吧。 Open
或Init
等方法。忘记打电话或打电话太多次很容易。如果构造函数将类置于可用状态,那就更好了。