我试图更好地了解如何使用单元测试。我想用Nunit在Xsockets中测试发送和接收。
现在,当我进行测试时,没有发生任何事情
我只想创建监听器,然后调用invoke,然后等待并更新结果值。
我想要一些你测试一个事件的东西 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);
答案 0 :(得分:1)
您应该在代码示例中准确显示控制器是什么以及它来自何处,但是查看您提供的XSockets链接我想我知道您的期望。
在使用线程,套接字或代码执行中存在连续性中断的任何场景进行测试时,您遇到的问题很常见。解决方案是删除不连续性或解释它。
问题在于您不确切知道何时处理事件。在大多数情况下(每种情况?),您的断言将在事件处理程序和测试失败之前执行。
实际上,您正在测试XSocket功能和代码。我发现大多数时候你不想测试XSocket库(至少不在这里 - 这是你的代码的单元测试)。在这种情况下,您希望从测试中删除XSocket代码。为此,您可以模拟(or stub)控制器直接调用您的事件代码。
另一种可能性是通过等待结果值在某些(可能很短的)时间段内改变来考虑不连续性,并且只有在规定的时间内没有发生变化时才能通过测试失败。我通常不会推荐这种方法,但如果希望使用套接字功能来测试代码,那么它偶尔也是合理的。