gpt4 book ai didi

c# - 单元测试和 session ?

转载 作者:行者123 更新时间:2023-11-30 22:33:18 25 4
gpt4 key购买 nike

我有这样的例程:

public bool IsValidEmployee(string email, string password)
{
bool valid = false;
var employee = dataAccess.GetEmployee(email, password);

if(employee! = null)
{
valid = true;
HttpContext.Current.Session["Employee"] = employee;
}

return valid;
}

我的单元测试:

[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("C:\Projects", "/")]
[UrlToTest("http://localhost:59349/")]
public void GetEmployeeTest()
{
Domain target = new Domain();

var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.SetupSet(c => c.Session["Employee"] = It.IsAny<object>());

Assert.IsTrue(target.IsValidEmployee("sam@gmail.com", "test");
}

代码失败为

Object Null Reference on 'HttpContext.Current.Session["Employee"] = employee;'

有什么建议可以解决这个错误吗?

最佳答案

我认为仅仅模拟 HttpSession 不足以让您的方法中的 session 采取模拟行为。您需要一种方法来注入(inject)该依赖项。

您可以重新设计您的函数以将 session 对象作为参数。这将使您的方法可测试

例如

public bool IsValidEmployee(string email, string password, HttpSessionStateBase session)
{
bool valid = false;
var employee = dataAccess.GetEmployee(email, password);

if(employee! = null)
{
valid = true;
session["Employee"] = employee;
}

return valid;
}

此外,您可以创建一个“SessionManager”,它可以实现 ISessionManager,它将包装您对 session 状态的所有访问并传递它,使其更易于测试,从而将如何以及在何处保存 session 状态的责任与验证员工分离。

关于c# - 单元测试和 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8361196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com