Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟信号器客户端的方法。单元测试中的分组_C#_Unit Testing_Signalr_Moq - Fatal编程技术网

C# 模拟信号器客户端的方法。单元测试中的分组

C# 模拟信号器客户端的方法。单元测试中的分组,c#,unit-testing,signalr,moq,C#,Unit Testing,Signalr,Moq,我正在为信号器应用程序编写模拟测试用例。我只是在的帮助下开始的,但是我的需求与上面的示例略有不同。 以下是我在谷歌搜索后完成的代码 信号树 单元测试 公共接口IClientContract{} [测试方法] 公共无效GetNoficationTest() { var hub=新的HubServer(); var mockClients=new Mock(); hub.Clients=mockClients.Object; var all=new Mock(); string message=“要

我正在为信号器应用程序编写模拟测试用例。我只是在的帮助下开始的,但是我的需求与上面的示例略有不同。 以下是我在谷歌搜索后完成的代码

信号树 单元测试
公共接口IClientContract{}
[测试方法]
公共无效GetNoficationTest()
{
var hub=新的HubServer();
var mockClients=new Mock();
hub.Clients=mockClients.Object;
var all=new Mock();
string message=“要发送的消息”;
mockClients.Setup(m=>m.Group(“Manager”))。返回(消息);
mockClients.Setup(m=>m.All).Returns(All.Object);
hub.GetNofication(“模拟呼叫信号中心”);
all.VerifyAll();
}
我是单元测试应用程序的初学者,只想确认这是否是模拟信号器组的正确方法。

使用

集线器组是可模仿的

需要使用必要的方法更新客户合同。在这种情况下,您必须添加
Broadcast
方法,以匹配它在集线器中的调用方式

public interface IClientContract {
    void Broadcast(string message);
}
接下来,通过设置中心的依赖项来安排测试,并练习测试中的方法

[TestMethod]
public void _GetNoficationTest() {
    // Arrange.
    var hub = new HubServer();
    var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
    var groups = new Mock<IClientContract>();
    var message = "Message to send";
    var groupName = "Manager";

    hub.Clients = mockClients.Object;
    groups.Setup(_ => _.Broadcast(message)).Verifiable();
    mockClients.Setup(_ => _.Group(groupName)).Returns(groups.Object);

    // Act.
    hub.GetNofication(message);

    // Assert.
    groups.VerifyAll();
}

您是否收到任何错误,或者这是一次代码检查?@Nkosi无错误,测试成功通过。这只是为了让代码审查检查它是否是模拟的正确方式?如果没有,那么需要你的帮助来纠正它。我测试了你上面的代码,但没有通过。我的回答是基于您的代码不工作的事实。在我的应用程序中,使用上面的代码成功地通过了测试。正如我告诉你的,我是编写模拟测试用例的初学者,我只是想确认我是否这样做了。我在这里也发布了另一个单元测试组的例子,以防有任何帮助:
public interface IClientContract {
    void Broadcast(string message);
}
[TestMethod]
public void _GetNoficationTest() {
    // Arrange.
    var hub = new HubServer();
    var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
    var groups = new Mock<IClientContract>();
    var message = "Message to send";
    var groupName = "Manager";

    hub.Clients = mockClients.Object;
    groups.Setup(_ => _.Broadcast(message)).Verifiable();
    mockClients.Setup(_ => _.Group(groupName)).Returns(groups.Object);

    // Act.
    hub.GetNofication(message);

    // Assert.
    groups.VerifyAll();
}
[TestMethod]
public void _GetNoficationTest_Expando() {
    // Act.
    var hub = new HubServer();
    var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
    dynamic groups = new ExpandoObject();
    var expected = "Message to send";
    string actual = null;
    var groupName = "Manager";
    bool messageSent = false;

    hub.Clients = mockClients.Object;
    groups.Broadcast = new Action<string>(m => {
        actual = m;
        messageSent = true;
    });
    mockClients.Setup(_ => _.Group(groupName)).Returns((ExpandoObject)groups);

    // Act.
    hub.GetNofication(expected);

    // Assert.
    Assert.IsTrue(messageSent);
    Assert.AreEqual(expected, actual);
}