gpt4 book ai didi

c# - 模拟 protected 方法

转载 作者:行者123 更新时间:2023-11-30 12:22:34 25 4
gpt4 key购买 nike

我查看了几乎所有我在谷歌上可能找到的与这个主题相关的链接,并提出了以下两个无法正确运行的解决方案。我有一个 protected 方法,它只返回一个字符串。

protected virtual string ConfirmText
{
get
{
return "someTextHere";
}
}

这是在 View 模型中。到目前为止,我尝试过的测试是 -

[TestMethod]
public void Confirm_Text_test()
{
Mock<TestViewModel> testViewModel= new Mock<TestViewModel>(null, null, null);

testViewModel.Protected()
.Setup<string>("ConfirmText")
.Returns("Ok")
.Verifiable();


testViewModel.Verify();
}

我明白,对于上面的例子,我只是设置和断言,而不是对其采取行动。我一直无法找到一种方法来对设置采取行动,例如

var result = testViewModel.ConfirmText;

因为它说由于其保护级别而无法访问。

我尝试过的下一个方法是

var result = testViewModel.Object.GetType()
.InvokeMember("ConfirmText",
BindingFlags.InvokeMethod |
BindingFlags.NonPublic |
BindingFlags.Instance,
null,
testViewModel.Object,
null);

我是不是遗漏了什么,因为我研究过的大多数示例都显示了与我尝试的第一种方法类似的东西。

最佳答案

根据上面的评论将其发布为答案而不是编辑。

我使用反射根据上面的以下建议解决了这个问题。

[TestMethod]
public void ConfirmText()
{
TestViewModel testViewModel= new TestViewModel (null, null, null);

var result = testViewModel.GetType()
.InvokeMember("ConfirmText",
BindingFlags.GetProperty |
BindingFlags.NonPublic |
BindingFlags.Instance,
null,
testViewModel,
null);

Assert.AreEqual("Confirm", result);
}

方法是-

protected override string confirmText
{
get
{
return Properties.Resources.confirmMessage;
}
}

关于c# - 模拟 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672856/

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