使用Moq对C#中的函数进行单元测试

时间:2018-10-03 20:00:26

标签: unit-testing moq

我正在尝试使用Moq在C#中为以下功能编写单元测试,但是发现我有点不知所措,将验证和其他Moq概念缠起来。

public X509Certificate GetCertificate(string certificateName)
        {
            var settingOverride = this.settings.SecretOverridesSetting.FirstOrDefault(secret => secret.Name.Equals(certificateName, StringComparison.InvariantCultureIgnoreCase));
            if (settingOverride != null)
            {
                X509Certificate targetCertificate;
                var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
                store.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection certColl = store.Certificates.Find(X509FindType.FindByThumbprint, settingOverride.Value, false);
                if (certColl.Count == 0)
                {
                    return null;
                }

                targetCertificate = certColl[0];
                store.Close();
                return targetCertificate;
            }
            else
            {
                return SecretStoreClientHelper.GetCertificate(certificateName);
            }
        }

这是我第一次用任何语言编写函数的单元测试。 有人可以在一些可以使用Moq的单元测试方案中为我提供帮助。

1 个答案:

答案 0 :(得分:0)

您需要以不与任何实现紧密结合的方式来重构此代码。因为您不能使用MOQ模拟类的非虚拟方法。

请参考链接https://github.com/Moq/moq4/wiki/Quickstart,以获取有关使用MOQ创建测试方法的更多详细信息。