Я пытаюсь написать несколько тестов вокруг некоторого кода, написанного ранее, прежде чем начать работать с ним.Я сталкиваюсь с проблемами, когда метод контроллера ссылается на некоторые статические переменные, которые T4MVC создает для изображений и ссылок.На самом деле это та же проблема, что и мой предыдущий вопрос здесь , но он не в конструкторе.
Проблема заключается в следующем коде:
if (User.IsInRole("Rate Admin") || User.IsInRole("Administrator"))
{
_ratesViewData.ActionLinks = new List<CustomActionLink>
{
new CustomActionLink("Edit",
editPath + Resources.DelimeterHyphen,
Links.Content.Images.openwhite_gif),
new CustomActionLink("Delete",
statusPath + Resources.DelimeterHyphen,
Links.Content.Images.openwhite_gif)
};
}
Проблема в Links.Content.Images.openwhite_gif, ниже в сгенерированном коде T4MVC он вызывает VirtualPathUtility.ToAbsolute из статического метода ProcessVirtualPath.Я не могу издеваться над ProcessVirtualPath или VirtualPathUtility.
Теперь в комментарии выше ProcessVirtualPath говорится, что он вызывается через делегат, чтобы можно было заменить его для модульного тестирования.Делегат:
public static Func<string, string> ProcessVirtualPath = ProcessVirtualPathDefault;
Как заменить то, что вызывается для ProcessVirtualPath для обеспечения модульного тестирования.Мне все равно, если он действительно получит правильный путь, я просто не хочу, чтобы он взорвался.Могу ли я сделать это из моего метода испытаний?Без изменения кода, чтобы проверить, не отлажен ли он в не тестовом проекте?
Также связанный вопрос: каков наилучший метод для кода, подобного описанному выше?Где должен быть код для условий на основе разрешений?Или даже боевые ссылки.Я не уверен, почему они находятся в модели viewdata.
ОК. Я получил это для работы с кодом, упомянутым в комментарии.
T4MVCHelpers.ProcessVirtualPath = (s) => "~/Content/Images";
НО только когда тест выполняется индивидуально, любой тест, который нуждается в этом, не будет выполнен, если он будет выполнен с другим тестом, который использует класс TestControllerBuilder и не устанавливает его.Зачем?