为 Xsockets 创建单元测试
Create Unit test for Xsockets
我正在尝试更好地了解如何使用单元测试。我想用 Nunit 在 Xsockets 中测试发送和接收。
现在,当我 运行 测试时,什么都没有发生
我只想创建侦听器然后调用调用,然后等待并更新结果值。
当你测试一个事件时,我想要类似的东西
Unit testing that an event is raised in 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) 控制器以直接调用您的事件代码。
另一种可能性是通过等待结果值更改一段时间(可能很短)并且只有在指定时间内未发生更改时才使测试失败来解释不连续性。我通常不推荐这种方法,但如果想要测试代码 和 套接字功能到位时,偶尔使用这种方法是合理的。
我正在尝试更好地了解如何使用单元测试。我想用 Nunit 在 Xsockets 中测试发送和接收。
现在,当我 运行 测试时,什么都没有发生
我只想创建侦听器然后调用调用,然后等待并更新结果值。
当你测试一个事件时,我想要类似的东西 Unit testing that an event is raised in 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) 控制器以直接调用您的事件代码。
另一种可能性是通过等待结果值更改一段时间(可能很短)并且只有在指定时间内未发生更改时才使测试失败来解释不连续性。我通常不推荐这种方法,但如果想要测试代码 和 套接字功能到位时,偶尔使用这种方法是合理的。