Я пишу единый тест для метода расширения htmlhelper , но это немного сложно, потому что он вызывает urlhelper внутри метода, а не использование инъекции зависимости. Это означает, что я не могу просто издеваться над Urlhelper .
Итак, в моем тесте я создал объект htmlhelper и издевался над всеми необходимыми свойствами. Я сделал все возможное, чтобы настроить htmlhelper.viewcontext.requestcontext , так как это то, на что полагается Urlhelper , когда он построен. Но когда я его отладил, urlhelper.action вернул null .
Я бы признателен за любые понимания того, что может вызвать эту проблему!
Оригинальный метод:
public static bool IsActive(this HtmlHelper helper, string actionName, string controllerName, string areaName)
{
string currentUrl = helper.ViewContext.HttpContext.Request.RawUrl;
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
string url = urlHelper.Action(actionName, controllerName, new { area = areaName });
return currentUrl.Contains(url);
}
< /code>
Вот моя попытка: < /p>
[Fact]
public void IsActive_WhenUrlIsCurrentUrl_ReturnsTrue()
{
// Arrange
var dictionary = new { action = "Index", controller = "Home", area = "Admin" };
var viewDataDictionary = new ViewDataDictionary(dictionary);
var htmlHelper = MvcHelper.GetHtmlHelperWithPath(viewDataDictionary, "/Home/Index/Admin");
// Act
var result = htmlHelper.IsActive("Index", "Home", "Admin");
// Assert
Assert.True(result);
}
public static class MvcHelper
{
public const string AppPathModifier = "/$(SESSION)";
public static HtmlHelper GetHtmlHelperWithPath(ViewDataDictionary viewData, string appPath)
{
ViewContext viewContext = GetViewContextWithPath(appPath, viewData);
Mock mockContainer = new Mock();
mockContainer.Setup(c => c.ViewData).Returns(viewData);
IViewDataContainer container = mockContainer.Object;
return new HtmlHelper(viewContext, container);
}
public static ViewContext GetViewContextWithPath(string appPath, ViewDataDictionary viewData)
{
HttpContextBase httpContext = GetHttpContext(appPath, "/request", "GET", Uri.UriSchemeHttp.ToString());
Mock mockViewContext = new Mock() { DefaultValue = DefaultValue.Mock };
RouteData rd = new RouteData();
rd.Values.Add("controller", "Home");
rd.Values.Add("action", "Index");
rd.Values.Add("area", "Admin");
mockViewContext.Object.RequestContext = new RequestContext(httpContext, rd);
mockViewContext.Setup(c => c.HttpContext).Returns(httpContext);
mockViewContext.Setup(c => c.ViewData).Returns(viewData);
mockViewContext.Setup(c => c.Writer).Returns(new StringWriter());
return mockViewContext.Object;
}
public static HttpContextBase GetHttpContext(string appPath, string requestPath, string httpMethod, string protocol)
{
Mock mockHttpContext = new Mock();
mockHttpContext.Setup(o => o.Request.ApplicationPath).Returns(appPath);
mockHttpContext.Setup(o => o.Request.RawUrl).Returns(appPath);
mockHttpContext.Setup(o => o.Request.AppRelativeCurrentExecutionFilePath).Returns(requestPath);
Uri uri = new Uri(protocol + "://localhost");
mockHttpContext.Setup(o => o.Request.Url).Returns(uri);
mockHttpContext.Setup(o => o.Request.PathInfo).Returns(String.Empty);
mockHttpContext.Setup(o => o.Request.HttpMethod).Returns(httpMethod);
mockHttpContext.Setup(o => o.Session).Returns((HttpSessionStateBase)null);
mockHttpContext.Setup(o => o.Response.ApplyAppPathModifier(It.IsAny())).Returns(r => AppPathModifier + r);
mockHttpContext.Setup(o => o.Items).Returns(new Hashtable());
return mockHttpContext.Object;
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... unit-tests
Как настроить requestContext для UrlHelper в модульных тестах ASP.NET ⇐ C#
Место общения программистов C#
1756820344
Anonymous
Я пишу единый тест для метода расширения htmlhelper , но это немного сложно, потому что он вызывает urlhelper внутри метода, а не использование инъекции зависимости. Это означает, что я не могу просто издеваться над Urlhelper .
Итак, в моем тесте я создал объект htmlhelper и издевался над всеми необходимыми свойствами. Я сделал все возможное, чтобы настроить htmlhelper.viewcontext.requestcontext , так как это то, на что полагается Urlhelper , когда он построен. Но когда я его отладил, urlhelper.action вернул null .
Я бы признателен за любые понимания того, что может вызвать эту проблему!
Оригинальный метод:
public static bool IsActive(this HtmlHelper helper, string actionName, string controllerName, string areaName)
{
string currentUrl = helper.ViewContext.HttpContext.Request.RawUrl;
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
string url = urlHelper.Action(actionName, controllerName, new { area = areaName });
return currentUrl.Contains(url);
}
< /code>
Вот моя попытка: < /p>
[Fact]
public void IsActive_WhenUrlIsCurrentUrl_ReturnsTrue()
{
// Arrange
var dictionary = new { action = "Index", controller = "Home", area = "Admin" };
var viewDataDictionary = new ViewDataDictionary(dictionary);
var htmlHelper = MvcHelper.GetHtmlHelperWithPath(viewDataDictionary, "/Home/Index/Admin");
// Act
var result = htmlHelper.IsActive("Index", "Home", "Admin");
// Assert
Assert.True(result);
}
public static class MvcHelper
{
public const string AppPathModifier = "/$(SESSION)";
public static HtmlHelper GetHtmlHelperWithPath(ViewDataDictionary viewData, string appPath)
{
ViewContext viewContext = GetViewContextWithPath(appPath, viewData);
Mock mockContainer = new Mock();
mockContainer.Setup(c => c.ViewData).Returns(viewData);
IViewDataContainer container = mockContainer.Object;
return new HtmlHelper(viewContext, container);
}
public static ViewContext GetViewContextWithPath(string appPath, ViewDataDictionary viewData)
{
HttpContextBase httpContext = GetHttpContext(appPath, "/request", "GET", Uri.UriSchemeHttp.ToString());
Mock mockViewContext = new Mock() { DefaultValue = DefaultValue.Mock };
RouteData rd = new RouteData();
rd.Values.Add("controller", "Home");
rd.Values.Add("action", "Index");
rd.Values.Add("area", "Admin");
mockViewContext.Object.RequestContext = new RequestContext(httpContext, rd);
mockViewContext.Setup(c => c.HttpContext).Returns(httpContext);
mockViewContext.Setup(c => c.ViewData).Returns(viewData);
mockViewContext.Setup(c => c.Writer).Returns(new StringWriter());
return mockViewContext.Object;
}
public static HttpContextBase GetHttpContext(string appPath, string requestPath, string httpMethod, string protocol)
{
Mock mockHttpContext = new Mock();
mockHttpContext.Setup(o => o.Request.ApplicationPath).Returns(appPath);
mockHttpContext.Setup(o => o.Request.RawUrl).Returns(appPath);
mockHttpContext.Setup(o => o.Request.AppRelativeCurrentExecutionFilePath).Returns(requestPath);
Uri uri = new Uri(protocol + "://localhost");
mockHttpContext.Setup(o => o.Request.Url).Returns(uri);
mockHttpContext.Setup(o => o.Request.PathInfo).Returns(String.Empty);
mockHttpContext.Setup(o => o.Request.HttpMethod).Returns(httpMethod);
mockHttpContext.Setup(o => o.Session).Returns((HttpSessionStateBase)null);
mockHttpContext.Setup(o => o.Response.ApplyAppPathModifier(It.IsAny())).Returns(r => AppPathModifier + r);
mockHttpContext.Setup(o => o.Items).Returns(new Hashtable());
return mockHttpContext.Object;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79523484/how-to-set-up-requestcontext-for-urlhelper-in-asp-net-unit-tests[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия