C#如何在抽象类中Moq保护类

C#如何在抽象类中Moq保护类,c#,unit-testing,moq,C#,Unit Testing,Moq,我试图模拟受保护的类,但抛出异常System.ArgumentException:“Member Manager.handler不存在。”。如何模拟受保护的类?下面是我的代码 [TestMethod] public void MyTest4() { Mock<Manager> mock = new Mock<Manager>(); var result = (FileHandler)Assembly.GetExec

我试图模拟受保护的类,但抛出异常System.ArgumentException:“Member Manager.handler不存在。”。如何模拟受保护的类?下面是我的代码

    [TestMethod]
    public void MyTest4()
    {
        Mock<Manager> mock = new Mock<Manager>();

        var result = (FileHandler)Assembly.GetExecutingAssembly().CreateInstance("AB.Tests.FileHandler", true);
        mock.Protected().Setup<FileHandler>("handler").Returns(result);
    }

    public abstract class Manager
    {
        protected FileHandler handler = null;
    }

    public abstract class FileHandler
    {
        protected string firstName = null;
        protected string lastName = null;
    }
[TestMethod]
公共无效MyTest4()
{
Mock Mock=新Mock();
var result=(FileHandler)Assembly.getExecutionGassembly().CreateInstance(“AB.Tests.FileHandler”,true);
mock.Protected().Setup(“handler”)。返回(结果);
}
公共抽象类管理器
{
受保护的FileHandler=null;
}
公共抽象类FileHandler
{
受保护字符串firstName=null;
受保护字符串lastName=null;
}

您可以尝试使用扩展并再次使用直接反射来调用所需的方法

一个片段是:

var mockMyClass = new Mock<MyClass>();
mockMyClass.Protected().Setup<Handler>("handler").Returns(result);

// Act!
var result = (bool)mockMyClass.Object.GetType().InvokeMember("Manager",
    BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,
    null,
    mockMyClass.Object,
    null);

// Assert
Assert.IsTrue(result);
mockMyClass.Protected().Verify<Handler>("handler", Times.Once());
var mockMyClass=new Mock();
mockMyClass.Protected().Setup(“handler”)。返回(结果);
//表演!
var result=(bool)mockMyClass.Object.GetType().InvokeMember(“管理器”,
BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,
无效的
mockMyClass.Object,
无效);
//断言
断言(结果);
mockMyClass.Protected().Verify(“handler”,Times.Once());

对不起,我不明白你的意思。我的现有代码将在此行“mockMyClass.Protected().Setup(“handler”)。返回(结果);”时出错。你能解释更多细节吗?感谢这是一个基本的代码片段,您需要在这里创建一个受保护的扩展,然后使用直接反射来调用所需的测试。看看我所附的链接,一个你明白的链接,事情对你来说会更清楚。moq与虚拟属性和方法一起工作。可以重写的成员。它不能模拟受保护的字段,也不能像在示例中那样创建抽象类的实例。