【问题标题】:Nunit test async code with .NET 3.5Nunit 使用 .NET 3.5 测试异步代码
【发布时间】:2015-09-11 16:41:26
【问题描述】:

我正在使用 .NET 3.5 并希望通过 Nunit 测试来测试委托/lambda 表达式中的异步代码,但无法使其正常工作。如果可能的话,任何人都可以就如何做到这一点提供一些建议吗?这是一个示例(SomeMethod 立即返回,并在稍后调用 OnDone):

[Test]
public void MyTest()
{
    MyClass.SomeMethod(123, OnDone);
}

private void OnDone(object sender, MyEventArgs e)
{
    Assert.AreEqual(123, e.Value);
}

【问题讨论】:

  • SomeMethod 是做什么的?它似乎在执行委托之前返回。
  • 不知道 MyClass 和 SomeMethod 中有什么我不知道这是如何回答的。
  • 抱歉,SomeMethod 立即返回,并在稍后调用 OnDone。

标签: c# asynchronous nunit


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多