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