[英]Unit Testing Web Service Session variable with NUnit and Moq
我想测试某些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));
这将断言您正在使用这些参数调用该方法。
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.