相关疑难解决方法(0)

模拟HttpContext用于单元测试.NET核心MVC控制器?

我在控制器中有一个函数,我是单元测试,期望http请求的标头中的值.我无法初始化HttpContext,因为它只是readonly.

我的控制器函数需要"device-id"的http请求标头值

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();

    //not valid controller.HttpContext is readonly
    //controller.HttpContext = new DefaultHttpContext(); 

    var result = controller.Get();
    Assert.AreEqual(result.Count(), 2);
}
Run Code Online (Sandbox Code Playgroud)

没有使用第三方库,有没有直接的方法来做到这一点?

c# asp.net-mvc unit-testing asp.net-core

68
推荐指数
3
解决办法
3万
查看次数

如何在ASP.net核心单元测试项目中模拟Session变量?

如何在ASP.net核心单元测试项目中模拟Session变量?

1)我创建了一个会话的模拟对象。

模拟ockHttpContext = new Mock(); 模拟嘲讽HttpHttpContext = new Mock();模拟嘲讽Session = new Mock()。As();

2)设置GetString()方法

mockSession.Setup(s => s.GetString(“ ModuleId”))。Returns(“ 1”);

3)创建controllerContext并分配mockhttpContext对象

controller.ControllerContext.HttpContext =模拟HttpContext.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 …
Run Code Online (Sandbox Code Playgroud)

asp.net unit-testing

4
推荐指数
1
解决办法
3031
查看次数

标签 统计

unit-testing ×2

asp.net ×1

asp.net-core ×1

asp.net-mvc ×1

c# ×1