【发布时间】:2013-01-05 06:52:04
【问题描述】:
目前,我正在做类似于this 的事情来集成测试与我们的 API 控制器通信的库,到目前为止一切顺利,但我遇到了一个障碍。在我们所有的其他集成测试中,我们在隔离级别 ReadCommitted 的 MSDTC 事务中运行测试,以便每个人都有自己的与数据库等的小型私人会话,并且在每次测试结束时,事务都会回滚。 ..但这对于 这些 测试不起作用,因为事务是每个线程的,并且所有 HttpClient/HttpServer 方法都是异步的,因此工作是在与主线程不同的线程上完成的该测试没有要订阅的环境事务,并且继续进行并提交。
我遇到过一些关于如何在一个线程上打开 TransactionScope 然后创建一个依赖事务以通过闭包传递给新任务的帖子,但我不知道如何将其应用于 HttpClient连接到内存中的 HttpServer。我怀疑我只是没有以正确的方式思考它,但这就是我所要做的。
什么会有意义/工作/等等?我可以完全控制 HttpServer 和将连接到它的 HttpClient 的创建,但我不知道如何处理它们。
更新:
已经取得了一些进展——我编写了一个消息处理程序,可以在工作线程上创建一个依赖事务 if Transaction.Current 在到达那里时被填充,对于我的一些调用它是,但对其他人来说不是,我想知道我是否可能在追逐阴影——比如,周围有很多 ContinueWith ,我认为它是在调用线程(自然会有事务)上执行的,如果前件任务已经完成。
是否有可能只同步运行整个事情并一直执行测试线程?我已经尝试了一些与 ContinueWith'ing 同步但没有取得多大成功..
【问题讨论】:
标签: c# asp.net-web-api task-parallel-library integration-testing transactionscope