我有一个具有公共方法Start
,一个私有方法和一个事件Finishing
类。 Start
致电new Thread(private_method)
。使用事件的私有方法返回值。当这个方法完成他们的工作,然后调用这个事件。测试方法(NUnit的2.6)
现在我想写测试此类。如果我这样写:
[Test]
public void Test1()
{
SomeClass someObject = new SomeClass();
someObject.Finishing += new SomeClass.FinishingEventHandler((sender, a) =>
{
Assert.True(false);
});
someObject.Start(); // when this method will finish, then call event Finishing
}
它应该是失败,但事实并非如此。我认为方法Test1
在事件发生之前完成。那么,我该如何测试这些代码呢?如何测试方法,它创建一个新的线程,并导致我们从事件
不知道,我使用FluentAssertions而不是内置的NUnit断言。刚刚检查出来,他们有一些事件监测断言。 http://fluentassertions.codeplex.com/documentation – Bronumski 2012-03-22 23:22:56
内置等待相当不错。它允许定义超时和轮询间隔Is.EqualTo(“完成”)。(500,50)之后。所以你不需要等很长时间,如果事情发生很快:) – 2012-03-22 23:26:17
这个解决方案看起来很不错,但..我有这个问题。我不确定发生了什么。在我的例子中'eventRaised'被正确设置为'true'(我把它写在控制台上)。但是'断言。(事件发生了,Is.True.After(5000))';' “告诉我”'eventRaised'是'false' ..怎么可能?我不确定,但也许它是'bool'的问题,它不是引用类,所以也许'Assert.That()'获得这个'eventRaised'就像false,并且它不引用'eventRaised'我在'event'设置为'true' .. – nirmus 2012-03-23 01:31:06