为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链接,我想我知道你在期待什么。
在使用线程,套接字或任何在代码执行中存在连续性中断的场景进行测试时,您遇到的问题是常见的。解决办法是要么消除不连续,要么解释它。
问题在于您不知道事件将在何时被处理。在大多数情况下(每一种情况?),您的断言将在事件处理程序之前执行,并且测试将失败。
实际上,这里您正在测试XSocket功能和您的代码。我发现大多数时候你都不想测试XSocket库(至少在这里不是——这是一个针对你的代码的单元测试)。在本例中,您希望从测试中删除XSocket代码。为此,您可以模拟(或存根)控制器来直接调用您的事件代码。
另一种可能是通过等待结果值在一段时间内(可能很短)发生变化来解释不连续,并且只有在分配的时间内没有发生变化时,测试才会失败。我通常不会推荐这种方法,但是如果需要在套接字功能的情况下测试代码,那么偶尔也是合理的。