В моем контроллере есть метод, который возвращает данные атрибута из текущей исполняющей сборки в частичное представление.Как вводить макет сборки для использования с Moq
В этом примере я просто занимаю название, но мне нужно сделать больше с ним.
Контроллер:
var title = "";
var asm = Assembly.GetExecutingAssembly();
var attrs = asm.GetCustomAttributes(typeof(AssemblyTitleAttribute));
var titleAttr = (AssemblyTitleAttribute)attributes[0];
title = titleAttr.Title;
return PartialView("_Build", title);
При написании модульного тестирования в Moq, мне нужно найти способ, чтобы впрыснуть Ассамблея атрибутов в макете, чтобы я мог убедиться, что правильные атрибуты генерируются при Я запускаю проверку контроллера, а затем делаю x или y с моими утверждениями.
UnitTest:
//Arrange
//The magic I need to happen.
//Act
var controller = GetController();
var result = controller.MyMethod() as PartialViewResult;
var title = result.Model;
//Assert
Assert.AreEqual("Title", title); //currently static, need to verify against a mock
Я знаю, что это очень простой набор кода, но мне просто нужно доказательство концепции в этой точке.
Есть ли хороший способ создания поддельной сборки? Нужно ли использовать System.Reflection.Emit?
Что делать, если наследование контроллера наследует конструктор в производном классе? –
@PhillipJenkins Затем вы создаете перегрузку, которая наследуется от базы. Не стоит волноваться - это сплошной подход Майкла Перса «эффективно работать с устаревшим кодом», чтобы изолировать проблемный код. Обратите внимание на «устаревший код» - если вы в настоящее время не испытываете этой проблемы, не стоит тратить время на размышления о последствиях или «будущих доказательствах»; это время было бы лучше потрачено, просто рефакторинг кода, чтобы значение было введено. – moarboilerplate
@PhillipJ см. Отредактированный ответ, контроллер имеет конструктор с параметром, который будет издеваться и вводиться в тестируемый класс. – dee