我正在使用 .NET 3.5 并希望使用 Nunit 测试来测试委托(delegate)/lambda 表达式中的异步代码,但无法使其正常工作。如果可能的话,任何人都可以就如何做到这一点提出一些建议吗?这是一个示例(SomeMethod 立即返回,并在稍后调用 OnDone):
[Test]
public void MyTest()
{
MyClass.SomeMethod(123, OnDone);
}
private void OnDone(object sender, MyEventArgs e)
{
Assert.AreEqual(123, e.Value);
}
最佳答案
如果 SomeMethod
在调用委托(delegate)之前返回,那么您将不得不使用某种同步原语来等待委托(delegate)被调用。
安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);
关于c# - Nunit 使用 .NET 3.5 测试异步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32519017/