1

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

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

我只想创建侦听器然后调用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);
4

1 回答 1

1

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

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

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

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

另一种可能性是通过等待结果值在某个(可能很短的)时间段内发生变化来解释不连续性,并且只有在分配的时间内没有发生变化时才使测试失败。我通常不会推荐这种方法,但如果希望使用适当的套接字功能测试代码,则偶尔这样做是合理的。

于 2015-06-05T20:15:17.080 回答