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

标签 c# asynchronous nunit

我正在使用 .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/

相关文章:

c# - C# 中的递归序列化

c# - 根据窗口大小重组其单元格的网格?

.net - Visual Studio Team System 2008 Developer Edition 上的代码覆盖率(在 NUnit 应用程序上)

c# - GraphQL + Autofac

c# - ASP.net Core MVC 未在抽象结果上调用 System.Text.Json 的自定义多态 JsonConverter

Java CompletableFuture get 方法

c# - 如何在自己的进程中执行测试类中的每个测试

c# - 当前的 SynchronizationContext 不能用作 TaskScheduler

ios - 异步加载和 UITableView 的 -reloadData

javascript - Promise 是异步解决还是同步解决?