目前,我正在做类似于this的事情来集成测试一个与我们的API控制器通信的库,到目前为止都很好,但我遇到了一个问题。在我们所有其他的集成测试中,我们在MSDTC事务中以ReadCommitted隔离级别运行测试,以便每个测试都有自己的小型私有会话与数据库等,并且在每个测试结束时,事务都会回滚。但是对于这些测试,这种方法不起作用,因为事务是针对每个线程的,而所有HttpClient / HttpServer方法都是异步的,因此工作是在与该测试的主线程不同的线程上完成的,没有环境事务可供订阅,并直接提交。
我看到过一些关于如何在一个线程上打开TransactionScope,然后通过闭包创建一个依赖事务传递给新任务的帖子,但我不知道如何将其应用于连接到内存中的HttpServer的HttpClient。我怀疑我只是没有正确地思考它,但这就是我所拥有的。
我看到过一些关于如何在一个线程上打开TransactionScope,然后通过闭包创建一个依赖事务传递给新任务的帖子,但我不知道如何将其应用于连接到内存中的HttpServer的HttpClient。我怀疑我只是没有正确地思考它,但这就是我所拥有的。
有哪些做法是合理的/可行的?我完全掌控了HttpServer和将连接到它的HttpClient的创建,但我不知道该怎么做。
更新:
取得了一些进展——我编写了一个消息处理程序,可以在工作线程上创建一个依赖事务,如果当它到达时已经填充了Transaction.Current,并且对于我的一些调用来说,确实填充了,但对于其他调用来说,却没有填充,我想知道我是否在追踪幻影——比如,周围有很多ContinueWith,如果前置任务已经完成,则我认为它在调用线程上执行(自然会有一个事务)。
是否可能只同步运行整个过程并一直保持测试线程?我尝试了一些同步ContinueWith,但没有太大的成功。