使用NUnit和Moq对Web服务会话变量进行单元测试
本文关键字:变量 会话 单元测试 服务 Web NUnit Moq 使用 | 更新日期: 2023-09-27 18:28:14
我想测试一些Web服务(asmx)的WebMethod。假设我有以下代码:
public IUsersRepository UsersRepository
{
get { return Session["repository"] as IUsersRepository; }
set { Session["repository"] = value; }
}
[WebMethod(EnableSession = true)]
public int AddUser(string userName, int something)
{
var usersRepository = Session["repository"] as IUsersRepository;
return usersRepository.AddUser(userName, something);
}
以及相应的单元测试(只是测试是否调用了存储库):
[Test]
public void add_user_adds_user()
{
// Arrange
var repository = new Mock<IUsersRepository>();
var service = new ProteinTrackingService { UsersRepository = repository.Object };
// Act
var userName = "Tester";
var something = 42;
service.AddUser(userName: userName, something: something);
// Assert
repository.Verify(r => r.AddUser(
It.Is<string>(n => n.Equals(userName)),
It.Is<int>(p => p.Equals(something))));
}
当我运行此测试时,我收到以下错误消息:
System.InvalidOperationException:HttpContext不可用
此类只能在ASP.NET请求的上下文中使用。
我该怎么做才能使这个测试发挥作用?
你看过这个吗?在单元测试中设置HttpContext.Current.Session显然可以模拟会话。
关于你的断言,你可以直接做:
// Assert
repository.Verify(r => r.AddUser(userName, something));
这将断言您正在使用这些参数调用该方法。
希望这能有所帮助!