为Xsockets创建单元测试

时间:2015-06-05 19:48:20

标签: c# .net unit-testing nunit xsockets.net

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

现在,当我进行测试时,没有发生任何事情

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

我想要一些你测试一个事件的东西 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);

1 个答案:

答案 0 :(得分:1)

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

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

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

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

另一种可能性是通过等待结果值在某些(可能很短的)时间段内改变来考虑不连续性,并且只有在规定的时间内没有发生变化时才能通过测试失败。我通常不会推荐这种方法,但如果希望使用套接字功能来测试代码,那么它偶尔也是合理的。