[英]Nunit test async code with .NET 3.5
I'm using .NET 3.5 and want an Nunit test to test async code in a delegate/lambda expression, but can't get it to work. 我正在使用.NET 3.5并希望Nunit测试在委托/ lambda表达式中测试异步代码,但无法使其工作。 Can anyone please give some advice on how to do this, if it's possible?
如果有可能,有人可以就如何做到这一点提出一些建议吗? Here's an example (SomeMethod returns straight away, and calls OnDone at a later time):
这是一个例子(SomeMethod直接返回,稍后调用OnDone):
[Test]
public void MyTest()
{
MyClass.SomeMethod(123, OnDone);
}
private void OnDone(object sender, MyEventArgs e)
{
Assert.AreEqual(123, e.Value);
}
If SomeMethod
returns before calling the delegate, then you'll have to use some kind of synchronization primitive to wait for the delegate to be called. 如果
SomeMethod
在调用委托之前返回,那么您将不得不使用某种同步原语来等待委托被调用。
An AutoResetEvent
will do. 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.