Как скопировать переменные сеанса в проект тестирования ядра ядра ASP.net?Как скопировать переменные сеанса в проект тестирования ядра ядра ASP.net?
1) Я создал макет объекта сессии.
Mock mockHttpContext = new Mock(); Mock mockHttpContext = new Mock(); Mock mockSession = new Mock(). As();
2) Установка GetString() Метод
mockSession.Setup (с => s.GetString ("ModuleId")) Возвращает ("1").
3) создано controllerContext и назначенный объект mockhttpContext
controller.ControllerContext.HttpContext = mockHttpContext.Object;
4) Попытка читать с контроллера.
HttpContext.Session.GetString ("ModuleId")
В то время как я получаю нулевое значение "ModuleId". Пожалуйста, помогите мне издеваться сеанса GetString() метод
Пример:
//Arrange
//Note: Mock session
Mock<HttpContext> mockHttpContext = new Mock<HttpContext>();
Mock<ITestSession> mockSession = new Mock<ISession>().As<ITestSession>();
//Cast list to IEnumerable
IEnumerable<string> sessionKeys = new string[] { };
//Convert to list.
List<string> listSessionKeys = sessionKeys.ToList();
listSessionKeys.Add("ModuleId");
sessionKeys = listSessionKeys;
mockSession.Setup(s => s.Keys).Returns(sessionKeys);
mockSession.Setup(s => s.Id).Returns("89eca97a-872a-4ba2-06fe-ba715c3f32be");
mockSession.Setup(s => s.IsAvailable).Returns(true);
mockHttpContext.Setup(s => s.Session).Returns(mockSession.Object);
mockSession.Setup(s => s.GetString("ModuleId")).Returns("1");
//Mock TempData
var tempDataMock = new Mock<ITempDataDictionary>();
//tempDataMock.Setup(s => s.Peek("ModuleId")).Returns("1");
//Mock service
Mock<ITempServices> mockITempServices= new Mock<ITempServices>();
mockITempServices.Setup(m => m.PostWebApiData(url)).Returns(Task.FromResult(response));
//Mock Management class method
Mock<ITestManagement> mockITestManagement = new Mock<ITestManagement>();
mockITestManagement .Setup(s => s.SetFollowUnfollow(url)).Returns(Task.FromResult(response));
//Call Controller method
TestController controller = new TestController (mockITestManagement .Object, appSettings);
controller.ControllerContext.HttpContext = mockHttpContext.Object;
controller.TempData = tempDataMock.Object;
//Act
string response = await controller.Follow("true");
// Assert
Assert.NotNull(response);
Assert.IsType<string>(response);
Показать метод испытания. – Nkosi
Спасибо, NKosi за ваш ответ. –
У меня есть решение этой проблемы. Я создал на классном классе для сеанса и унаследовал от ISession. Реализованы все методы ISession в этом классе mock и использовали этот класс для хранения переменных сеанса. –