为Xsockets创建单元测试

本文关键字:单元测试 创建 Xsockets | 更新日期: 2023-09-27 17:53:52

我试图更好地理解如何使用单元测试。我想用Nunit测试Xsockets中的Send和Receive。

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

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

我想要的东西,当你测试一个事件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创建单元测试

你应该在你的代码样本中显示控制器是什么,它来自哪里,但是看看你提供的XSockets链接,我想我知道你在期待什么。

在使用线程,套接字或任何在代码执行中存在连续性中断的场景进行测试时,您遇到的问题是常见的。解决办法是要么消除不连续,要么解释它。

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

实际上,这里您正在测试XSocket功能和您的代码。我发现大多数时候你都不想测试XSocket库(至少在这里不是——这是一个针对你的代码的单元测试)。在本例中,您希望从测试中删除XSocket代码。为此,您可以模拟(或存根)控制器来直接调用您的事件代码。

另一种可能是通过等待结果值在一段时间内(可能很短)发生变化来解释不连续,并且只有在分配的时间内没有发生变化时,测试才会失败。我通常不会推荐这种方法,但是如果需要在套接字功能的情况下测试代码,那么偶尔也是合理的。