C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – SignalR:使用moq框架模拟IHub并测试他的方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试测试继承基类Hub( implements IHub interface)的自定义RepositoryHub.我嘲笑了IHub的所有必要属性和我要测试的方法调用.方法调用被模仿为派生自定义类RepositoyHub的调用
hubMock.Setup(p => p.OnConnected()).返回(new RepositoryHub().OnConnected());
问题是该方法无法访问模拟的IHub字段.

[TestMethod]
    public void Is_OnConnected_Successive_When_Instances_is_Absent_And_User_Authenticated()
    {
        try
        {
            var connectionId = "1";

            var request = new Mock<IRequest>();
            request.Setup(s => s.User.Identity.Name).Returns(user + "&" + server + "&" + password + "&" + level);
            request.Setup(s => s.User.Identity.IsAuthenticated).Returns(true);

            var mockClients = new Mock<IHubCallerConnectionContext>();
            var mockGroupManager = new Mock<IGroupManager>();
            var mockHubCallerContext = new Mock<HubCallerContext>(request.Object,connectionId);

            var hubMock = new Mock<IHub>(); 
            hubMock.Setup(p => p.Groups).Returns(mockGroupManager.Object);
            hubMock.Setup(p => p.Context).Returns(mockHubCallerContext.Object);
            hubMock.Setup(p => p.Clients).Returns(mockClients.Object);
            //Mock virtual method call
            hubMock.Setup(p => p.OnConnected()).Returns(new RepositoryHub().OnConnected()); 


            var r = hubMock.Object.OnConnected();
        }
        catch (Exception ex)
        {       
            throw;
        }
    }
       // Here method which i want to test with mocked IGroupManager,HubCallerContext and IHubCallerConnectionContext

    public partial class  RepositoryHub: Hub
    {
        public override Task OnConnected()
        {
            try
            {
                var userProfile = new UserProfile(Context.User); 
                //NullReference exception Context == null,but why i got it if mocked
                //HubCallerContext in test method

                Groups.Add(Context.ConnectionId,userProfile.ServerUrl);
                // and other useful actions 

                return base.OnConnected();
            }
            catch (Exception ex)
            {
                Log.TraceError(String.Format(" Hub: OnConnected() {0}",ex.Message));
                throw;
            }
        }
     }

解决方法

我觉得这很简单.谢谢你的关注!

var repository = new RepositoryHub(){ Context = mockHubCallerContext.Object,Clients = mockClients.Object,Groups = mockGroupManager.Object };

            var r = repository.OnConnected();

对于JohnB,回答你的上一个问题:

[TestMethod]
public void Is_OnConnected_Successive()
{
    const string connectionId = "1";
    dynamic groupName = new ExpandoObject();

    var IsSendMessageCalled = false;

    groupName.sendMessage = new Action<object>((message) =>
    {
        IsSendMessageCalled = true;
        Debug.WriteLine("sendMessage was called,message:  {0}",message);
    });

    var request = new Mock<IRequest>();
    request.Setup(s => s.User.Identity.Name).Returns(user + "&" + server + "&" + password + "&" + level);
    request.Setup(s => s.User.Identity.IsAuthenticated).Returns(true);

    var mockClients = new Mock<IHubCallerConnectionContext>();
    mockClients.Setup(m => m.Group("groupName")).Returns((ExpandoObject)groupName);

    var mockGroupManager = new Mock<IGroupManager>();
    var mockHubCallerContext = new Mock<HubCallerContext>(request.Object,connectionId);

    var hub = new RepositoryHub()
    {
        Context = mockHubCallerContext.Object,Groups = mockGroupManager.Object
    };

    var testMethod = hub.OnConnected();
    Thread.Sleep(threadSleepTime);
    //or testMethod.Wait();

    Assert.IsTrue(IsSendMessageCalled);
}

建议,在这里调用sendMessage(message)方法

public override Task OnConnected()
{
    Hub.Clients.Group("groupName").sendMessage("Hello ! for groupName group ");
}

大佬总结

以上是大佬教程为你收集整理的c# – SignalR:使用moq框架模拟IHub并测试他的方法全部内容,希望文章能够帮你解决c# – SignalR:使用moq框架模拟IHub并测试他的方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: