c# - 单元测试异步操作

标签 c# unit-testing testing asynchronous

我想对一个执行异步操作的方法进行单元测试:

 Task.Factory.StartNew(() =>
        {
            // method to test and return value
            var result = LongRunningOperation();
        });

我在我的单元测试(用 c# 编写)中 stub 了必要的方法等,但问题是在我断言测试之前异步操作没有完成。

我该如何解决这个问题?我应该创建 TaskFactory 的模拟或任何其他技巧来对异步操作进行单元测试吗?

最佳答案

您必须有某种方法来伪造任务创建。

如果您将 Task.Factory.StartNew 调用移动到某个依赖项 (ILongRunningOperationStarter),那么您可以创建一个使用 TaskCompletionSource 的替代实现创建可以准确完成您希望的任务的任务。

它可能有点麻烦,但可以完成。我 blogged about this不久前 - 单元测试一种方法,该方法接收 任务开始,这当然使事情变得更容易。它位于 C# 5 中的异步/等待上下文中,但适用相同的原则。

如果您不想伪造整个任务创建过程,您可以替换任务工厂,并以这种方式控制时间 - 但老实说,我怀疑这会更麻烦。

关于c# - 单元测试异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556350/

相关文章:

c# - WPF : Set ListViewItem from textblock in the Listview within a DataTemplate

c# - 将 .asp.net 图表标签更改为值,然后仅格式化图表,而不是图例

java - 使用 EasyMock 将 Powermock 与 TestNG 结合使用。抛出异常

python - 我需要测试功能的哪些方面?

unit-testing - 在 Golang 中测试接受不返回值的回调函数的方法

java - 测试输出内容到文件

android - 如何在硬件设备上测试签名的应用程序 (apk)?

c# - 将 Int 转换为两个 Shorts 返回填充数据/负值

c# - 如何将日期时间参数传递给条件方法?

java - 如何从java二进制文件外部操作java.util.Date date()?