【发布时间】:2012-09-09 07:20:54
【问题描述】:
我有什么可能的解决方法来使用 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。 这是被测试的类:
公共类 X509IssuerNameRegistry:IssuerNameRegistry { 只读 List _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)还是我应该寻找另一个模拟框架来完成这个?
【问题讨论】:
-
如果 st 对象在您的代码 sn-p 中没有任何用途,但动态代理库在这种情况下可能会有所帮助
-
谢谢 Jani.. 更正了代码 sn-p。
标签: .net unit-testing mocking moq-3