Макет объекта в методе - PullRequest
1 голос
/ 03 июля 2019

У меня проблемы с модульным тестированием по методу ниже. Я не могу смоделировать MyClass, но мне нужно заполнить подпорки в нем, чтобы иметь возможность провести модульное тестирование остальной части метода. Можно ли создать MyClass экземпляр и оценить в модульном тесте?

public async Task<MyResponse> Handle(MyRequest request, CancellationToken cancellationToken)
{
    MyClass obj = new MyClass();

    _dependecy.Execute(obj);

    foreach(var o in obj.Props)
    {
        //do some processing
    }

}

1 Ответ

3 голосов
/ 03 июля 2019

Вам необходимо внедрить экземпляр MyClass в качестве параметра конструктора, свойства или параметра метода. Затем вы можете смоделировать его и передать экземпляр макета, или, в зависимости от вашего кода, может не понадобиться его смоделировать, и вы можете просто передать экземпляр MyClass со свойствами, установленными для теста.

Для передачи MyClass через конструктор:

public class ClassThatUsesMyClass
{
    private readonly MyClass _myClass;

    public ClassThatUsesMyClass(MyClass myClass)
    {
        _myClass = myClass;
    }

    public async Task<MyResponse> Handle(MyRequest request, 
        CancellationToken cancellationToken)
    {
        // This method uses the _myClass field instead of creating an instance of MyClass
    }
}

Или как аргумент метода:

public class ClassThatUsesMyClass
{
    public async Task<MyResponse> Handle(MyRequest request, MyClass myClass, 
        CancellationToken cancellationToken)
    {
        // This method uses the myClass argument instead of creating an instance of MyClass
    }
}

В обоих случаях класс получает экземпляр MyClass вместо , создающий его. Это то, что мы называем внедрение зависимости. (MyClass - это зависимость, то есть то, от чего она зависит или в чем нуждается.)

Поскольку он передается в качестве аргумента, модульный тест может сначала установить его свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...