我有一個具有公共方法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