【问题标题】:How to unit test ASP.NET 5 / MVC 6 Session?如何对 ASP.NET 5 / MVC 6 会话进行单元测试?
【发布时间】:2016-03-18 04:20:01
【问题描述】:

我在类库中有一个更新会话变量的函数。 ISession 作为参数从控制器传入,因此函数可以更改会话变量。

我想测试这个函数以确保会话变量被正确更新。

然而,首先,我只是想开始使用 XUnit 进行基本单元测试,但我无法让 Session 工作

[Fact]
public void CreateSessionVariable()
{
    var httpContext = new DefaultHttpContext();
    httpContext.Session.SetString("MyVar", "Hi");
    Assert.True(httpContext.Session.Get("MyVar") != null);
}

httpContext.Session.SetString 我得到错误:

尚未为此应用程序或请求配置会话

我知道在 MVC6 应用程序中您必须执行 services.AddSession()app.UseSession() 之类的操作,但我不知道如何为单元测试设置这些内容。

如何配置 Session 以在单元测试中使用?

【问题讨论】:

标签: c# unit-testing session asp.net-core xunit


【解决方案1】:

Microsoft.AspNet.Session 已经测试过了,你可以在这里阅读测试代码https://github.com/aspnet/Session/blob/dev/test/Microsoft.AspNet.Session.Tests/SessionTests.cs
您不必对其进行测试。

使用Moq模拟ISession

测试项目.json

{
  "version": "1.0.0-*",
  "dependencies": {
      "{YourProject under test}": "",
      "xunit": "2.1.0",
      "xunit.runner.dnx": "2.1.0-rc1-*"
    },
  "commands": {
      "test": "xunit.runner.dnx"
  },
  "frameworks": {
    "dnx451": {
      "dependencies": {
        "Moq": "4.2.1312.1622" 
      }
    }
  }
}

测试可能如下所示:

[Fact]
public void CreateSessionVariableTest()
{
    var sessionMock = new Mock<ISession>();
    sessionMock.Setup(s => s.Get("MyVar")).Returns("Hi);

    var classToTest = new ClassToTest(sessionMock.Object);
    classToTest.CreateSessionVariable();
}

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 2014-05-21
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多