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

时间:2018-10-29 05:30:37

标签: c# unit-testing moq

我尝试模拟受保护的类,但抛出异常System.ArgumentException:'成员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;
    }

1 个答案:

答案 0 :(得分:1)

您可以尝试使用扩展名moq's protected并再次使用直接反射来调用所需的方法。

摘要为:

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());