为 Xsockets 创建单元测试

Create Unit test for Xsockets

我正在尝试更好地了解如何使用单元测试。我想用 Nunit 在 Xsockets 中测试发送和接收。

现在,当我 运行 测试时,什么都没有发生

我只想创建侦听器然后调用调用,然后等待并更新结果值。

当你测试一个事件时,我想要类似的东西 Unit testing that an event is raised in C#

Xsockets C#

[Test]
public  void Xsockets_Change_Test()
{
    var mocks = new MockRepository();
    var metaData = mocks.CreateMock<MetaData>();
    var result = 0;

    controller.On<MetaData>("Change",
        (message) =>
        {
            result++;
        });

    controller.Invoke("Change", metaData);            
    Assert.That(result, Is.EqualTo(1));
}

IListener On<T>(string target, Action<T> action);

void Invoke(string target, object data);

您应该在您的代码示例中准确显示控制器是什么以及它来自哪里,但是查看您提供的 XSockets link 我想我知道您在期待什么。

您遇到的问题在使用线程、套接字或任何代码执行连续性中断的场景进行测试时很常见。解决方案是消除不连续性或解决它。

问题在于您不知道事件将在何时被处理。在大多数情况下(每种情况?),您的断言将在事件处理程序之前执行,并且测试将失败。

实际上,您正在测试 XSocket 功能和您的代码。我发现大多数时候您不想测试 XSocket 库(至少在这里不想——这是针对 您的 代码的单元测试)。在这种情况下,您希望从测试中删除 XSocket 代码。为此,您可以模拟 (or stub) 控制器以直接调用您的事件代码。

另一种可能性是通过等待结果值更改一段时间(可能很短)并且只有在指定时间内未发生更改时才使测试失败来解释不连续性。我通常不推荐这种方法,但如果想要测试代码 套接字功能到位时,偶尔使用这种方法是合理的。