繁体   English   中英

使用NUnit和Moq进行单元测试Web服务会话变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM