如何在ASP.net核心單元測試項目中模擬會話變量?如何在ASP.net核心單元測試項目中模擬會話變量?
1)我創建了一個會話的模擬對象。
Mock mockHttpContext = new Mock(); Mock mockHttpContext = new Mock(); Mock mockSession = new Mock()。As();
2)設置getString()方法
mockSession.Setup(S => 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方法,並使用這個類來存儲會話變量。 –