如何对ASP.NET5/MVC 6 Session进行单元测试?
How to unit test ASP.NET 5 / MVC 6 Session?
我在 class 库中有一个更新会话变量的函数。 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
我收到错误:
Session has not been configured for this application or request
我知道在 MVC6 应用程序中您必须执行 services.AddSession()
和 app.UseSession()
之类的操作,但我不知道如何为单元测试设置它们。
如何配置会话以在单元测试中使用?
Microsoft.AspNet.Session
已经测试过了,你可以在这里阅读测试代码https://github.com/aspnet/Session/blob/dev/test/Microsoft.AspNet.Session.Tests/SessionTests.cs
你不必测试它。
使用Moq
模拟ISession
:
测试project.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();
}
我在 class 库中有一个更新会话变量的函数。 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
我收到错误:
Session has not been configured for this application or request
我知道在 MVC6 应用程序中您必须执行 services.AddSession()
和 app.UseSession()
之类的操作,但我不知道如何为单元测试设置它们。
如何配置会话以在单元测试中使用?
Microsoft.AspNet.Session
已经测试过了,你可以在这里阅读测试代码https://github.com/aspnet/Session/blob/dev/test/Microsoft.AspNet.Session.Tests/SessionTests.cs
你不必测试它。
使用Moq
模拟ISession
:
测试project.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();
}