Макет метода класса в результате действия C #, используя moq и nunit

Я делаю модульное тестирование контроллеров в моем основном проекте asp.net. В одном разделе есть код, подобный этому, создающий экземпляр объекта класса и вызывающий его метод.

public class ControllerNameController: ControllerBase{
    private IDependency _dependency;
    public ControllerNameController(IDependency dependency){
         _dependency = dependency
    }

       [HttpGet, Route("Get")]
        public ActionResult<dynamic> Get()
        {
            ......

            string someString = "abcd";
            ClassOne classOneObject = new ClassOne(_dependency);
            classOneObject.ClassOneMethod(someString);

            ..........

            return .....

        }
}

Я не могу издеваться над этой функцией. Как я могу это сделать?

Всего 1 ответ


Вам придется изменить код. Одним из основных преимуществ модульного тестирования является не защита от ошибок, а помощь в написании лучшего кода.

ErrorLogHelper - это либо сервис, либо горизонтальный аспект.

Moq предназначен для макетирования интерфейсов или виртуальных методов. Для этого вам нужно как-то внедрить эту зависимость в целевой объект.

В этом случае вам нужно сделать это зависимостью службы, заставить ее реализовать интерфейс и внедрить ее через свойство или конструктор.

Встроенная инициализация означает, что код должен выполняться с модульным тестом, так как он является неотъемлемой частью потока кода.

private IHostingEnvironment _hostingEnvironment;
public IErrorLogHelper logHelper
    public ControllerNameController(IHostingEnvironment hostingEnvironment, IErrorLogHelper logHelper){
         _hostingEnvironment = hostingEnvironment;
         this.logHelper = logHelper;
    }

И в вашем улове

catch (Exception ex)
            {

                string controllerInfo = controller.ActionDescriptor.DisplayName;
                logHelper.ErrorLogToFile(controllerInfo, ex);
            }

Есть идеи?

10000