[英]Nunit test async code with .NET 3.5
我正在使用.NET 3.5並希望Nunit測試在委托/ lambda表達式中測試異步代碼,但無法使其工作。 如果有可能,有人可以就如何做到這一點提出一些建議嗎? 這是一個例子(SomeMethod直接返回,稍后調用OnDone):
[Test]
public void MyTest()
{
MyClass.SomeMethod(123, OnDone);
}
private void OnDone(object sender, MyEventArgs e)
{
Assert.AreEqual(123, e.Value);
}
如果SomeMethod
在調用委托之前返回,那么您將不得不使用某種同步原語來等待委托被調用。
AutoResetEvent
會這樣做。
// Arrange
var are = new AutoResetEvent(false);
int args = 0;
EventHandler<object, MyEventArgs> handler = (s, e) =>
{
args = e.Value;
are.Set();
};
// Act
MyClass.SomeMethod(123, handler);
// Assert
var wasCalled = are.WaitOne(timeout: TimeSpan.FromSeconds(1));
Assert.True(wasCalled);
Assert.AreEqual(123, args);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.