Контроллер модульного тестирования, имитирующий ISessionC#

Место общения программистов C#
Ответить
Anonymous
 Контроллер модульного тестирования, имитирующий ISession

Сообщение Anonymous »

Я хочу выполнить модульное тестирование моего контроллера, но у меня возникают проблемы с чтением значений из HttpContext.Session.

Я хочу высмеять этот фрагмент из моего контроллера: HttpContext.Session. Get(Foo)

С Mock HttpContext для модульного тестирования контроллера MVC ядра .NET? и
Как имитировать объект сеанса в ядре asp net. Мне удалось прийти к следующему решению:

Мой тест:

public void GetFoos_AllGood_ReturnList()
{
//Arrange
Mock sessionMock = new Mock();
var fooSessionValue = new byte[0];

Web.Controllers.FooController fooController = new Web.Controllers.FooController();
fooController.ControllerContext.HttpContext = new DefaultHttpContext();
fooController.ControllerContext.HttpContext.Request.Headers["Foo"] = 0;

Mock mock = new Mock();
mock.Object.AddSession(); // Tried this, but failed

//Setup
sessionMock.Setup(_ => _.Set("Foo", It.IsAny())).Callback((k, v) => fooSessionValue = v);
sessionMock.Setup(_ => _.TryGetValue("Foo", out fooSessionValue)).Returns(true);
mockWebDataManager.Setup(b => b.GetFoos(It.IsAny())).Returns(new FooResult() { Foos = new List() });

//Act
var result = fooController.GetFoos() as JsonResult;

//Assert
Assert.NotNull(result);
Assert.Equal(200, result.StatusCode);
}


Мой контроллер:

internal virtual DataArgs CreateArgs()
{
return new FooArgs
{
HttpContext.Session.Get(Foo) // I want to Mock this value
};
}

[HttpGet]
public IActionResult GetFoos()
{
FooArgs args = CreateArgs();
...
}


Подробнее здесь: https://stackoverflow.com/questions/542 ... g-isession
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»