简体   繁体   English

Nunit使用.NET 3.5测试异步代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM