用.net 3.5测试异步代码

本文关键字:异步 代码 测试 net | 更新日期: 2023-09-27 18:12:12

我正在使用。net 3.5,并想要一个Nunit测试来测试委托/lambda表达式中的异步代码,但不能让它工作。如果可能的话,有谁能给点建议吗?下面是一个例子(someemethod直接返回,并在稍后调用OnDone):

[Test]
public void MyTest()
{
    MyClass.SomeMethod(123, OnDone);
}
private void OnDone(object sender, MyEventArgs e)
{
    Assert.AreEqual(123, e.Value);
}

用.net 3.5测试异步代码

如果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);