我在类库中有一个更新 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/