当前位置: 首页 > 知识库问答 >
问题:

单元测试异步操作

宋唯
2023-03-14
 Task.Factory.StartNew(() =>
        {
            // method to test and return value
            var result = LongRunningOperation();
        });

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

我怎么才能绕过这个?我应该创建一个模拟TaskFactory或任何其他技巧来单元测试异步操作吗?

共有1个答案

宋高谊
2023-03-14

您必须有一些方法来伪造任务创建。

如果将task.factory.startnew调用移动到某个依赖项(IlongRunningOperationStarter),则可以创建一个替代实现,该实现使用TaskCompletionSource创建任务,这些任务完全按照您希望的位置完成。

它可能会有点毛,但它可以做到。我不久前在博客上写了一篇关于这一点的文章--单元测试一个接收任务的方法,这当然会让事情变得更容易。它在C#5中的Async/Await上下文中,但同样的原则也适用。

 类似资料:
  • 我有一些代码,它使用的是class的方法,它是异步的。另外,我正在使用微软的单元测试应用程序项目来测试应用程序。 问题是测试框架并没有等待异步代码的运行结束,所以我无法检查它的结果。 如何使用Unit Test App项目测试异步代码?我没有使用异步/等待修改器。

  • 在试验并发执行时,我想知道如何实际测试它。执行流程具有副作用性质,创建未来是为了包装独立的执行/处理。 我一直在寻找一些关于如何正确单元测试的好例子,下面的场景(和是我希望测试的方法): 情景#1 情景动机 立即返回,但调用两个执行单独任务的未来(例如,保存分析并将记录存储到数据库)。这些服务调用可以被模拟,但我试图测试的是,一旦我将它们包装在s中,这两个服务都会被调用 场景#2 情景动机 从可以

  • import { QuoteComponent } from './quote.component'; import { provide } from '@angular/core'; import { async, TestBed, fakeAsync, tick, } from '@angular/core/testing'; class MockQuoteService {

  • 对于复杂的批处理任务,测试用例在点对点的测试方法中可能变成难于管理的。这些情况下,凭你们自己的力量用测试用例测试各个步骤更加有用。AbstractJobTests类包含一个方法launchStep需要一个步骤名称和运行特定的步骤。这个方法允许更有针对性的测试通过这个步骤允许测试设置数据并验证其结果。 JobExecution jobExecution = jobLauncherTestUtils.

  • 在我的React项目中,我正在单元测试一个调用另一个异步函数的异步函数。 尽管每次测试时,结果都是一个空的promise{},而不是预期的数据。我在网上找到了很多模拟异步“getJobStatuses”函数结果的实现,但都没有成功(显示了我在这里使用的实现)。为了测试调用它的函数(getAllJobs),模拟该函数结果的正确方法是什么

  • 用mocha测试一个函数是非常简单的,但是,在JavaScript的世界中,更多的时候,我们编写的是异步代码,所以,我们需要用mocha测试异步函数。 我们把上一节的hello-test工程复制一份,重命名为async-test,然后,把hello.js改造为异步函数: const fs = require('mz/fs'); // a simple async function: module