C # Как Moq защищенный класс в абстрактном классе - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь смоделировать защищенный класс, но выбрасываю исключение 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;
    }

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете попробовать сделать это, используя расширение 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...