c# - 如何对 ASP.NET 5/MVC 6 session 进行单元测试?

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

我在类库中有一个更新 session 变量的函数。 ISession 作为参数从 Controller 传入,因此该函数可以更改 session 变量。

我想测试此函数以确保正确更新 session 变量。

然而,首先,我只是想开始使用 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 上我得到错误:

Session has not been configured for this application or request

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

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

最佳答案

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();
}

关于c# - 如何对 ASP.NET 5/MVC 6 session 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34237332/

相关文章:

c# - 在不使用临时内存的情况下从列表中删除重复项

java - lombok.config 上的 addLombokGeneratedAnnotation 不会忽略 Jacoco 报告上的 Lombok Annotations

c# - 如何对调用 Response.AppendToLog 的方法进行单元测试?

c# - 如何在 Windows 商店应用程序中实现登录注销功能?

c# - 如何以编程方式将网站 (C#) 添加到 IIS 6.0?

c# - 如何修复不同计算机中 C# 和 SQL Server 之间的日期时间格式

javascript - 如何在 AngularJS 中测试 Service 与 IndexedDB 的配合

php - 如何在 PHP 中对 session 变量进行单元测试?

jquery - 将字体大小保存到 session 中

c# - 针对 MS Access 的 LINQ asp.net 页面。