gpt4 book ai didi

.net - 我可以在这种情况下使用 Moq 吗?

转载 作者:行者123 更新时间:2023-12-01 00:58:27 24 4
gpt4 key购买 nike

使用 Moq 模拟此对象有什么可能的解决方法。返回的错误信息是:“非虚拟(在 VB 中可覆盖)成员上的设置无效:p => p.Certificate.SubjectName.Name”

        var st = new Mock<X509SecurityToken>();
st.SetupGet(p => p.Certificate.SubjectName.Name).Returns("test1");
var target = new X509IssuerNameRegistry("test1", "test2");

var actual = target.GetIssuerName(st.Object);

Assert.AreEqual<string>("test1", actual, "Actual security token did not equal expected security token");

注意:我正在尝试模拟 X509SecurityToken .这是被测类:

公共(public)类 X509IssuerNameRegistry : IssuerNameRegistry{ 只读列表 _trustedSubjectNames = new List();

public X509IssuerNameRegistry(params string[] trustedSubjectNames)
{
_trustedSubjectNames = new List<string>(trustedSubjectNames);
}

public override string GetIssuerName(SecurityToken securityToken)
{
var x509Token = securityToken as X509SecurityToken;
if (x509Token != null)
{
if (_trustedSubjectNames.Contains(x509Token.Certificate.SubjectName.Name))
{
return x509Token.Certificate.SubjectName.Name;
}
}
throw new SecurityTokenException("Untrusted issuer.");
}

为此(使用最小起订量)有任何工作轮次,还是我应该寻找另一个模拟框架来完成这个?

最佳答案

不,Moq(就像任何继承类一样)不能覆盖非虚拟方法,因此除非您可以使 Name 成为虚拟属性(通过更改或包装类),否则它不能被 Moq 模拟。

我建议您尽可能将属性更改为虚拟属性,因为这样您就可以使用任何模拟框架。据我所知,只有 3 个可以模拟非虚拟方法,而且没有一个是免费的;

关于.net - 我可以在这种情况下使用 Moq 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com